Installing on Ubuntu
This installation guide is optimized for Ubuntu 24.04 and will install NodeBB with MongoDB as the database. Fully patched LTS and equivalent production versions of software are assumed and used throughout.
Confused? – A simpler guide for Ubuntu 18.04 with lots of screenshots can be found on the NodeBB Blog.
System Requirements
- Memory: Installing NodeBB's dependencies may require more than 512 megabytes of system memory. It is recommended to enable a swap partition to compensate if your Linux system has insufficient memory.
Installing Node.js
Naturally, NodeBB is driven by Node.js, and so it needs to be installed. Node.js is a rapidly evolving platform and so installation of the current LTS version of Node.js is recommended to make future updates seamless. The Node.js LTS Plan details the LTS release schedule including projected end-of-life.
Node.js is available from the NodeSource Ubuntu binary distributions repository. Download the setup script.
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg
curl -fsSL https://deb.nodesource.com/setup_lts.x -o nodesource_setup.sh
Run the script and install Node.js.
sudo -E bash nodesource_setup.sh
sudo apt-get install -y nodejs
Verify installation of Node.js and npm. You should have version 22 of Node.js installed (as of October 29, 2024), and version 10 of npm installed:
node -v
npm -v (should output "10.8.2" or similar)
Database
Installing MongoDB
MongoDB is the default database for NodeBB. As noted in the MongoDB Support Policy versions older than 4.4 are officially End of Life as of February 2024. This guide assumes installation of version 8.0. If you wish to use another database instead of MongoDB, the Configuring Databases section has more information.
Official detailed installation instructions can be found in the MongoDB manual. Although out of scope for this guide, some MongoDB production deployments leverage clustering, sharding and replication for high availibility and performance reasons. Please refer to the MongoDB Replication and Sharding topics for further reading. Keep in mind that NodeBB does not require any of these advanced configurations, and doing so may complicate your installation. Keeping it simple can often be best.
The following is an abbreviation of the official MongoDB installation guide for Ubuntu. If you're having issues, fall back to using that guide instead.
sudo apt-get install gnupg curl
curl -fsSL https://www.mongodb.org/static/pgp/server-8.0.asc | \
sudo gpg -o /usr/share/keyrings/mongodb-server-8.0.gpg \
--dearmor
echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-8.0.gpg ] https://repo.mongodb.org/apt/ubuntu noble/mongodb-org/8.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-8.0.list
sudo apt-get update
sudo apt-get install -y mongodb-org
Verify installation of MongoDB. You should have version 8.0:
mongod --version
db version v8.0
Start the mongod
service and verify service status. MongoDB should be active (running):
sudo systemctl start mongod
sudo systemctl status mongod
Configure MongoDB
General MongoDB administration is done through the MongoDB Shell mongosh
. A default installation of MongoDB listens on port 27017
and is accessible locally. Access the shell:
mongosh
Switch to the built-in admin
database:
> use admin
Create an administrative user (the is different from the nodebb
user we'll create later). Replace the placeholder <Enter a secure password>
with your own selected password. Be sure that the <
and >
are also removed.
> db.createUser( { user: "admin", pwd: "<Enter a secure password>", roles: [ { role: "root", db: "admin" } ] } )
This should output { ok: 1 }
. This user is scoped to the admin
database to manage MongoDB once authorization has been enabled.
To initially create a database that doesn't exist simply use
it. Add a new database called nodebb
:
> use nodebb
The database will be created and context switched to nodebb
. Next create the nodebb
user with the appropriate privileges:
> db.createUser( { user: "nodebb", pwd: "<Enter a secure password>", roles: [ { role: "readWrite", db: "nodebb" }, { role: "clusterMonitor", db: "admin" } ] } )
The readWrite
permission allows NodeBB to store and retrieve data from the nodebb
database. The clusterMonitor
permission provides NodeBB read-only access to query database server statistics which are then exposed in the NodeBB Administrative Control Panel (ACP).
Exit the Mongo Shell:
> quit()
Enable database authorization in the MongoDB configuration file /etc/mongod.conf
by appending the following lines:
security:
authorization: enabled
Restart MongoDB and verify the administrative user created earlier can connect:
sudo systemctl restart mongod
To connect to a MongoDB deployment that requires authentication, use the --username
and --authenticationDatabase
options. mongosh
prompts you for a password, which it hides as you type.
mongosh "mongodb://localhost:27017" --username admin --authenticationDatabase admin
If everything is configured correctly the Mongo Shell will connect. Exit the shell with quit()
.
Installing NodeBB
First, we must install git
as it is used to distribute NodeBB:
sudo apt-get install -y git
Note: commands like git
and ./nodebb
should not be used with root access (sudo
or elevated privileges). It will cause problems with different ownership of files NodeBB needs access to. Switch to a non-privileged user before running these commands.
Next, clone NodeBB into an appropriate location. Here the local nodebb
directory is used, though any destination is fine:
git clone -b v3.x https://github.com/NodeBB/NodeBB.git nodebb
cd nodebb
This clones the NodeBB repository from the
v3.x
branch to the nodebb
directory. A list of alternative branches are available in the NodeBB Branches GitHub page, but only the versioned branches are stable.
NodeBB ships with a command line utility which allows for several functions. We'll first use it to setup NodeBB. This will install modules from npm and then enter the setup utilty.
./nodebb setup
A series of questions will be prompted with defaults in parentheses. The default settings are for a local server listening on the default port 4567
with a MongoDB instance listening on port 27017
. When prompted for the mongodb username and password, enter nodebb
, and the password that you configured earlier. Once connectivity to the database is confirmed the setup will prompt that initial user setup is running. Since this is a fresh NodeBB install a forum administrator must be configured. Enter the desired administrator information (this is what you will log into your forum with). This will culminate in a NodeBB Setup Completed
message.
Note: When entering your site URL, make sure it is exactly what you plan on accessing your site at. If you plan on visiting http://example.org
to open your forum, then enter exactly http://example.org
.
A configuration file config.json will be created in the root of the nodebb directory. This file can be modified should you need to make changes such as changing the database location or credentials used to access the database.
Finally, you can use the cli utility to start NodeBB:
./nodebb start
Installing nginx
NodeBB by default runs on port 4567
, meaning that by default you must access it using a port number in addition to the hostname (e.g. http://example.org:4567
)
In order to allow NodeBB to be served without a port, nginx can be set up to proxy all requests to a particular hostname (or subdomain) to an upstream NodeBB server running on any port.
Switch back to the root user by running exit
before proceeding.
sudo apt-get install -y nginx
Verify the installation of nginx
nginx -v
and that the service will run
sudo systemctl start nginx
sudo systemctl status nginx
Configuring nginx
nginx-served sites are contained in a server
block which are normally stored in separate files from the main nginx config (which is very rarely edited).
When installing with the ppa above, the best way to install new nginx configs is to add new files in /etc/nginx/sites-available
(like /etc/nginx/sites-available/forum.example.org
). You then must link these files from sites-available
to sites-enabled
.
The following demonstrates a typical series of commands when creating a new nginx config:
cd /etc/nginx/sites-available
sudo nano forum.example.com # config entered into file and saved
cd ../sites-enabled
sudo ln -s ../sites-available/forum.example.com
Below is an example configuration for NodeBB running on port 4567
. Make sure to replace forum.example.com
with your own site URL (without https://
).
server {
listen 80;
server_name forum.example.com;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://127.0.0.1:4567;
proxy_redirect off;
# Socket.IO Support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
After making changes to nginx configs, you have to reload the service for changes to take effect:
sudo systemctl reload nginx
For more information, go to the configuring nginx page.
After Installation
Great, you have NodeBB installed and running. You should be able to access http://forum.example.com
and interact with your forum.