NodeBB
Forum and community discussion software built on Node.js.
- Replaces
-
Paid community forum services, such as Circle.
All open-source alternatives to Circle
- Difficulty
-
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.
- Stack
JavaScript (language), MongoDB (database), Redis (database), PostgreSQL (database)
- Deployment
docker_compose
- Requirements
Not stated.
- License
-
GPL-3.0(OSI-approved open source) - Business model
-
Unknown
The README at the pinned commit does not state a business model, so it stays unknown.
Source: github.com/NodeBB/NodeBB/blob/acca7f3/README.md, read on .
- Repository
GitHub stats
- Stars
- 15,240
- Forks
- 3,009
- Open issues and pull requests
- 116
- Last push
- 2026-10-22
- Latest release
- v4.16.3
- Released
- 2026-10-14
From the GitHub API on . These numbers are a snapshot, not live. GitHub detected the license as GPL-3.0.
Compose file
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
From the app's own repository: github.com/NodeBB/NodeBB/blob/acca7f3/docker-compose.yml.
Compose file from NodeBB/NodeBB, used inside a checkout of that repository (documented setup B).
Install
- Docker with the Compose plugin and git (github.com/NodeBB/NodeBB/blob/acca7f3/README.md)
A host with Docker, the Docker Compose plugin and git. This entry needs a checkout of the project repository.
- Get the source at commit acca7f3 (github.com/NodeBB/NodeBB/blob/acca7f3/README.md)
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 - The compose file in the checkout: docker-compose.yml (shown here for reading) (github.com/NodeBB/NodeBB/blob/acca7f3/docker-compose.yml)
Use the compose file shown above.
- What the compose file check ran with (github.com/NodeBB/NodeBB/blob/acca7f3/README.md)
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.
- Start it (github.com/NodeBB/NodeBB/blob/acca7f3/README.md)
docker compose up -d - Open the app (github.com/NodeBB/NodeBB/blob/acca7f3/docker-compose.yml)
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. (github.com/NodeBB/NodeBB/blob/acca7f3/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. (github.com/NodeBB/NodeBB/blob/acca7f3/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). (github.com/NodeBB/NodeBB/blob/acca7f3/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. (github.com/NodeBB/NodeBB/blob/acca7f3/docker-compose.yml, checked 2026-10-22)
Signals
- Open issues and pull requests: 116
- Last push: 2026-10-22 (0 days before this page was built)
- Latest release: v4.16.3 on 2026-10-14 (8 days before this page was built)