# NodeBB

Forum and community discussion software built on Node.js.

- Replaces: [Circle](https://openlogs.fyi/alternatives/circle)
- Summary: Paid community forum services, such as Circle.
- Stack: JavaScript (language), MongoDB (database), Redis (database), PostgreSQL (database)
- Deployment: docker_compose
- License: GPL-3.0 (osi) [source](https://github.com/NodeBB/NodeBB/blob/acca7f3471abd1c9ad1748a982b2408afa9dda73/LICENSE)
- Business model: unknown. The README at the pinned commit does not state a business model, so it stays unknown. ([source](https://github.com/NodeBB/NodeBB/blob/acca7f3471abd1c9ad1748a982b2408afa9dda73/README.md), read 2026-10-22)
- Difficulty: hard. 4 services (3 database or broker: mongo, redis, postgres), 8 volume mounts, no env values to set, no elevated host access. Heuristic score 6 of 11: hard. A source checkout is needed, and the first start builds images from source, so the rating is at least medium.
- Requirements: not stated
- Repository: [NodeBB/NodeBB](https://github.com/NodeBB/NodeBB)

## Install

1. Docker with the Compose plugin and git ([source](https://github.com/NodeBB/NodeBB/blob/acca7f3471abd1c9ad1748a982b2408afa9dda73/README.md))

   ```text
   A host with Docker, the Docker Compose plugin and git. This entry needs a checkout of the project repository.
   ```

2. Get the source at commit acca7f3 ([source](https://github.com/NodeBB/NodeBB/blob/acca7f3471abd1c9ad1748a982b2408afa9dda73/README.md))

   ```bash
   git init NodeBB
   cd NodeBB
   git remote add origin https://github.com/NodeBB/NodeBB.git
   git fetch --depth 1 origin acca7f3471abd1c9ad1748a982b2408afa9dda73
   git checkout FETCH_HEAD
   ```

3. The compose file in the checkout: docker-compose.yml (shown here for reading) ([source](https://github.com/NodeBB/NodeBB/blob/acca7f3471abd1c9ad1748a982b2408afa9dda73/docker-compose.yml))

   ```yaml
   services:
     nodebb:
       build: .
       # image: ghcr.io/nodebb/nodebb:latest
       restart: unless-stopped
       ports:
         - '4567:4567' # comment this out if you don't want to expose NodeBB to the host, or change the first number to any port you want
       volumes:
         - nodebb-build:/usr/src/app/build
         - nodebb-uploads:/usr/src/app/public/uploads
         - nodebb-config:/opt/config
         - ./install/docker/setup.json:/usr/src/app/setup.json
   
     mongo:
       image: 'mongo:7-jammy'
       restart: unless-stopped
       ports:
         - '27017:27017'
       environment:
         MONGO_INITDB_ROOT_USERNAME: nodebb
         MONGO_INITDB_ROOT_PASSWORD: nodebb
         MONGO_INITDB_DATABASE: nodebb
       volumes:
         - mongo-data:/data/db
         - ./install/docker/mongodb-user-init.js:/docker-entrypoint-initdb.d/user-init.js
     redis:
       image: redis:8.10.1-alpine
       restart: unless-stopped
       command: ['redis-server', '--appendonly', 'yes', '--loglevel', 'warning']
       # command: ['redis-server', '--save', '60', '1', '--loglevel', 'warning'] # uncomment if you want to use snapshotting instead of AOF
       volumes:
         - redis-data:/data
       profiles:
         - redis
   
     postgres:
       image: postgres:18.6-alpine
       restart: unless-stopped
       environment:
         POSTGRES_USER: nodebb
         POSTGRES_PASSWORD: nodebb
         POSTGRES_DB: nodebb
       volumes:
         - postgres-data:/var/lib/postgresql/data
       profiles:
         - postgres
   
   volumes:
     mongo-data:
       driver: local
       driver_opts:
         o: bind
         type: none
         device: ./.docker/database/mongo/data
   
     redis-data:
       driver: local
       driver_opts:
         o: bind
         type: none
         device: ./.docker/database/redis
   
     postgres-data:
       driver: local
       driver_opts:
         o: bind
         type: none
         device: ./.docker/database/postgresql/data
   
     nodebb-build:
       driver: local
       driver_opts:
         o: bind
         type: none
         device: ./.docker/build
   
     nodebb-uploads:
       driver: local
       driver_opts:
         o: bind
         type: none
         device: ./.docker/public/uploads
   
     nodebb-config:
       driver: local
       driver_opts:
         o: bind
         type: none
         device: ./.docker/config
   ```

4. What the compose file check ran with ([source](https://github.com/NodeBB/NodeBB/blob/acca7f3471abd1c9ad1748a982b2408afa9dda73/README.md))

   ```text
   The compose file check ran in a checkout of NodeBB/NodeBB at acca7f3471abd1c9ad1748a982b2408afa9dda73 (a sparse checkout: the top-level files and the folder install/docker). The README lists a Docker setup as its second install option and tells the reader to run docker-compose up in the repository.
   ```

5. Start it ([source](https://github.com/NodeBB/NodeBB/blob/acca7f3471abd1c9ad1748a982b2408afa9dda73/README.md))

   ```bash
   docker compose up -d
   ```

6. Open the app ([source](https://github.com/NodeBB/NodeBB/blob/acca7f3471abd1c9ad1748a982b2408afa9dda73/docker-compose.yml))

   ```text
   Open http://localhost:4567. The compose file publishes host port 4567 for the nodebb service. The README names this address after docker-compose up.
   ```

Compose file check: config_ok on 2026-10-22.

## Gotchas and maintenance

### Gotchas

- Some services build from source: These services have a build section and no image: nodebb. They need the project source next to the compose file. ([source](https://github.com/NodeBB/NodeBB/blob/acca7f3471abd1c9ad1748a982b2408afa9dda73/docker-compose.yml), checked 2026-10-22)
- The compose file publishes host ports: Host ports: 4567 (nodebb), 27017 (mongo). A port without a host address listens on all host network interfaces. ([source](https://github.com/NodeBB/NodeBB/blob/acca7f3471abd1c9ad1748a982b2408afa9dda73/docker-compose.yml), checked 2026-10-22)
- The compose file mounts host folders: Host paths mounted into containers: ./install/docker/setup.json at /usr/src/app/setup.json (nodebb), ./install/docker/mongodb-user-init.js at /docker-entrypoint-initdb.d/user-init.js (mongo). ([source](https://github.com/NodeBB/NodeBB/blob/acca7f3471abd1c9ad1748a982b2408afa9dda73/docker-compose.yml), checked 2026-10-22)
- The first start builds images from source: The compose file has a build section. The first docker compose up builds the image from the checkout, which needs time, disk space and network access. ([source](https://github.com/NodeBB/NodeBB/blob/acca7f3471abd1c9ad1748a982b2408afa9dda73/docker-compose.yml), checked 2026-10-22)

### Signals

Computed from a GitHub snapshot taken 2026-10-22.

- Open issues and pull requests: 116
- Stars: 15240, forks: 3009
- Last push: 2026-10-22 (0 days ago)
- Latest release: v4.16.3 on 2026-10-14 (8 days ago)

## Sources

- [Repository: https://github.com/NodeBB/NodeBB](https://github.com/NodeBB/NodeBB)
- [License: https://github.com/NodeBB/NodeBB/blob/acca7f3471abd1c9ad1748a982b2408afa9dda73/LICENSE](https://github.com/NodeBB/NodeBB/blob/acca7f3471abd1c9ad1748a982b2408afa9dda73/LICENSE)
- [Business model: https://github.com/NodeBB/NodeBB/blob/acca7f3471abd1c9ad1748a982b2408afa9dda73/README.md](https://github.com/NodeBB/NodeBB/blob/acca7f3471abd1c9ad1748a982b2408afa9dda73/README.md)
- [Compose file: https://github.com/NodeBB/NodeBB/blob/acca7f3471abd1c9ad1748a982b2408afa9dda73/docker-compose.yml](https://github.com/NodeBB/NodeBB/blob/acca7f3471abd1c9ad1748a982b2408afa9dda73/docker-compose.yml)

---
Canonical: https://openlogs.fyi/tools/nodebb  
Last updated: 2026-10-22
