Article

Table of Contents
Theme:
Was this article helpful?
Try Vultr Today with

$50 Free on Us!

Want to contribute?

You could earn up to $600 by adding new articles.

How to Install NodeBB forum on Fedora 28

Last Updated: Fri, Jan 25, 2019
Fedora Linux Guides Server Apps Social
Archived content

This article is outdated and may not work correctly for current operating systems or software.

NodeBB is a Node.js based forum. It utilizes web sockets for instant interactions and real-time notifications. NodeBB source code is publicly hosted on Github. This guide will walk you through the NodeBB installation process on a fresh Fedora 28 Vultr instance using Node.js, MongoDB as a database, Nginx as a reverse proxy and Acme.sh for SSL certificates.

Requirements

NodeBB requires the following software to be installed:

  • Git

  • Node.js version 6.9.0 or later

  • MongoDB version 2.6 or later

  • Nginx

  • Minimum of 1024MB RAM

  • Domain name with A/AAAA records set up

Before you begin

Check the Fedora version.

cat /etc/fedora-release

# Fedora release 28 (Twenty Eight)

Create a new non-root user account with sudo access and switch to it.

useradd -c "John Doe" johndoe && passwd johndoe

usermod -aG wheel johndoe

su - johndoe

NOTE: Replace johndoe with your username.

Set up the timezone.

timedatectl list-timezones

sudo timedatectl set-timezone 'Region/City'

Ensure that your system is up to date.

sudo dnf check-upgrade || sudo dnf upgrade -y

Install necessary packages.

sudo dnf install -y git wget vim gcc-c++ make

For simplicity, disable SELinux and Firewall.

sudo setenforce 0

sudo systemctl stop firewalld

sudo systemctl disable firewalld

Install Node.js

NodeBB is driven by Node.js, and so it needs to be installed. The installation of the current LTS version of Node.js is recommended.

Install Node.js.

sudo dnf install -y nodejs

Verify the installation of Node.js and npm.

node -v && npm -v

# v8.11.3

# 5.6.0

Install and configure MongoDB

MongoDB is the default database for NodeBB.

Install MongoDB.

sudo dnf install -y mongodb mongodb-server

Check the version.

mongo --version | head -n 1 && mongod --version | head -n 1

# MongoDB shell version v3.6.3

# db version v3.6.3

Enable and start the MongoDB service.

sudo systemctl enable mongod.service

sudo systemctl start mongod.service

Create a MongoDB database and user for NodeBB.

First connect to the MongoDB server.

mongo

Switch to the built-in admin database.

> use admin

Create an administrative user.

> db.createUser( { user: "admin", pwd: "<Enter a secure password>", roles: [ { role: "readWriteAnyDatabase", db: "admin" }, { role: "userAdminAnyDatabase", db: "admin" } ] } )

NOTE: Replace the placeholder <Enter a secure password> with your own selected password.

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" } ] } )

NOTE: Again, replace the placeholder <Enter a secure password> with your own selected password.

Exit the Mongo shell.

> quit()

Restart MongoDB and verify that the administrative user created earlier can connect.

sudo systemctl restart mongod.service

mongo -u admin -p your_password --authenticationDatabase=admin

Install and configure Nginx

Install Nginx.

sudo dnf install -y nginx

Check the version.

sudo nginx -v

# nginx version: nginx/1.12.1

Enable and start Nginx.

sudo systemctl enable nginx.service

sudo systemctl start nginx.service

NodeBB by default runs on port 4567. To avoid typing http://example.com:4567, we will configure Nginx as a reverse proxy for the NodeBB application. Every request on port 80 or 443 (if SSL is used) will be forwarded to port 4567.

Run sudo vim /etc/nginx/conf.d/nodebb.conf and populate it with the basic reverse proxy configuration below.

server {



  listen [::]:80;

  listen 80;



  server_name forum.example.com;



  root /usr/share/nginx/html;



  client_max_body_size 50M;



  location /.well-known/acme-challenge/ {

    allow all;

  }



  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_hide_header X-Powered-By;

    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";

  }



}

In the config above, update the server_name directive with your domain/hostname.

Check the configuration.

sudo nginx -t

Reload Nginx.

sudo systemctl reload nginx.service

Install Acme.sh client and obtain a Let's Encrypt certificate (optional)

Securing your forum with HTTPS is not necessary, but it will secure your site's traffic. Acme.sh is a pure unix shell software for obtaining SSL certificates from Let's Encrypt with zero dependencies.

Download and install Acme.sh.

sudo mkdir /etc/letsencrypt

git clone https://github.com/Neilpang/acme.sh.git

cd acme.sh

sudo ./acme.sh --install --home /etc/letsencrypt --accountemail your_email@example.com

cd ~

source ~/.bashrc

Check the version.

/etc/letsencrypt/acme.sh --version

# v2.7.9

Obtain RSA and ECDSA certificates for the forum.example.com domain/hostname.

# RSA 2048

sudo /etc/letsencrypt/acme.sh --issue --home /etc/letsencrypt -d forum.example.com --webroot /usr/share/nginx/html --reloadcmd "sudo systemctl reload nginx.service" --accountemail your_email@example.com --ocsp-must-staple --keylength 2048

# ECDSA/ECC P-256

sudo /etc/letsencrypt/acme.sh --issue --home /etc/letsencrypt -d forum.example.com --webroot /usr/share/nginx/html --reloadcmd "sudo systemctl reload nginx.service" --accountemail your_email@example.com --ocsp-must-staple --keylength ec-256

After running the commands above, your certificates and keys will be in the following directories:

  • RSA: /etc/letsencrypt/forum.example.com

  • ECC/ECDSA: /etc/letsencrypt/forum.example.com_ecc

After obtaining certificates from Let's Encrypt, we need to configure Nginx to use them.

Run sudo vim /etc/nginx/conf.d/nodebb.conf again and configure Nginx as an HTTPS reverse proxy.

server {



  listen [::]:443 ssl http2;

  listen 443 ssl http2;

  listen [::]:80;

  listen 80;



  server_name forum.example.com;



  root /usr/share/nginx/html;



  client_max_body_size 50M;



  location /.well-known/acme-challenge/ {

    allow all;

  }



  # RSA

  ssl_certificate /etc/letsencrypt/forum.example.com/fullchain.cer;

  ssl_certificate_key /etc/letsencrypt/forum.example.com/forum.example.com.key;

  # ECDSA

  ssl_certificate /etc/letsencrypt/forum.example.com_ecc/fullchain.cer;

  ssl_certificate_key /etc/letsencrypt/forum.example.com_ecc/forum.example.com.key;



  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";

  }



}

Check the configuration.

sudo nginx -t

Reload Nginx.

sudo systemctl reload nginx.service

Install NodeBB

Create a document root directory.

sudo mkdir -p /var/www/nodebb

Change ownership of the /var/www/nodebb directory to johndoe.

sudo chown -R johndoe:johndoe /var/www/nodebb

Navigate to the document root folder.

cd /var/www/nodebb

Clone the latest NodeBB into the document root folder.

git clone -b v1.10.x https://github.com/NodeBB/NodeBB.git .

Run the NodeBB setup command and answer each question when prompted.

./nodebb setup

After NodeBB setup is completed, run ./nodebb start to manually start your NodeBB server.

./nodebb start

After this command, you will be able to access your forum in your web browser.

Run NodeBB as a System Service

When started via ./nodebb start, NodeBB will not automatically start up again when the system reboots. To avoid that, we will need to setup NodeBB as a system service.

If it is running, stop NodeBB.

./nodebb stop

Create a new nodebb user.

sudo useradd nodebb

Change the ownership of the /var/www/nodebb directory to nodebb user.

sudo chown -R nodebb:nodebb /var/www/nodebb

Create the nodebb.service systemd unit config file. This unit file will handle startup of the NodeBB deamon. Run sudo vim /etc/systemd/system/nodebb.service and populate the file with the following content.

[Unit]

Description=NodeBB

Documentation=https://docs.nodebb.org

After=system.slice multi-user.target mongod.service



[Service]

Type=forking

User=nodebb



StandardOutput=syslog

StandardError=syslog

SyslogIdentifier=nodebb



Environment=NODE_ENV=production

WorkingDirectory=/var/www/nodebb

PIDFile=/var/www/nodebb/pidfile

ExecStart=/usr/bin/env node loader.js

Restart=always



[Install]

WantedBy=multi-user.target

NOTE: Set username and directory paths according to your chosen names.

Enable nodebb.service on reboot and immediately start nodebb.service.

sudo systemctl enable nodebb.service

sudo systemctl start nodebb.service

Check the nodebb.service status.

sudo systemctl status nodebb.service

sudo systemctl is-enabled nodebb.service

That's it. Your NodeBB instance is now up and running.

Want to contribute?

You could earn up to $600 by adding new articles.