How to Install NodeBB forum on Debian 9

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 Debian 9 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 Debian version.

lsb_release -ds
# Debian GNU/Linux 9.4 (stretch)

Ensure that your system is up to date.

apt update && apt upgrade -y

Install necessary packages.

apt install -y sudo dirmngr git build-essential apt-transport-https

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

adduser johndoe --gecos "John Doe"
usermod -aG sudo johndoe
su - johndoe

NOTE: Replace johndoe with your username.

Set up the timezone.

sudo dpkg-reconfigure tzdata

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 from the NodeSource repository.

curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
sudo apt install -y nodejs

Verify installation of Node.js and npm.

node -v && npm -v
# v10.15.0
# 5.6.0

Install and configure MongoDB

MongoDB is the default database for NodeBB.

Install MongoDB from the official MongoDB repository.

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4
echo "deb https://repo.mongodb.org/apt/debian stretch/mongodb-org/4.0 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list
sudo apt update
sudo apt install -y mongodb-org

Check the version.

mongo --version | head -n 1 && mongod --version | head -n 1
# MongoDB shell version v4.00
# db version v4.0.0

Start and enable MongoDB.

sudo systemctl start mongod.service
sudo systemctl enable mongod.service

Create a MongoDB database and user for NodeBB.

Connect to MongoDB.

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 the latest mainline version of Nginx from the official Nginx repository.

wget https://nginx.org/keys/nginx_signing.key
sudo apt-key add nginx_signing.key
rm nginx_signing.key
sudo -s
printf "deb https://nginx.org/packages/mainline/debian/ $(lsb_release -sc) nginx\ndeb-src https://nginx.org/packages/mainline/debian/ $(lsb_release -sc) nginx\n" >> /etc/apt/sources.list.d/nginx_mainline.list
exit
sudo apt update
sudo apt install -y nginx

Check the version.

sudo nginx -v
# nginx version: nginx/1.15.0

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 shown 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 [email protected]
cd ~
source ~/.bashrc

Check the version.

acme.sh --version
# v2.7.9

Obtain RSA and ECDSA certificates for forum.example.com.

# 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 [email protected] --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 [email protected] --ocsp-must-staple --keylength ec-256

After running the above commands, 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 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 running, stop NodeBB.

./nodebb stop

Create a new nodebb user:

sudo adduser nodebb

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

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

Create a nodebb.service systemd unit config file. This unit file will handle startup of 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.



Leave a Comment

Configure su propia red privada con OpenVPN

Configure su propia red privada con OpenVPN

Vultr le ofrece una increíble conectividad de red privada para servidores que se ejecutan en la misma ubicación. Pero a veces quieres dos servidores en diferentes países.

Cómo instalar Couch CMS 2.0 en un VPS LAMP Debian 9

Cómo instalar Couch CMS 2.0 en un VPS LAMP Debian 9

¿Usando un sistema diferente? Couch CMS es un sistema de gestión de contenido (CMS) simple y flexible, gratuito y de código abierto que permite a los diseñadores web diseñar

Cómo usar Sudo en Debian, CentOS y FreeBSD

Cómo usar Sudo en Debian, CentOS y FreeBSD

Usar un usuario sudo para acceder a un servidor y ejecutar comandos a nivel raíz es una práctica muy común entre Linux y Unix Systems Administrator. El uso de un sud

Configurar un Chroot en Debian

Configurar un Chroot en Debian

Este artículo le enseñará cómo configurar una cárcel chroot en Debian. Supongo que está utilizando Debian 7.x. Si está ejecutando Debian 6 u 8, esto puede funcionar, pero

How to Install PiVPN on Debian

How to Install PiVPN on Debian

Introduction An easy way to set up a VPN server on Debian is with PiVPN. PiVPN is an installer and wrapper for OpenVPN. It creates simple commands for you t

How to Install Kanboard on Debian 9

How to Install Kanboard on Debian 9

Using a Different System? Introduction Kanboard is a free and open source project management software program which is designed to facilitate and visualiz

How to Install Neos CMS on Debian 9

How to Install Neos CMS on Debian 9

Using a Different System? Neos is a Content Application Platform with a CMS and an application framework at its core. This guide will show you how to instal

Configurar Cactus en Debian Jessie

Configurar Cactus en Debian Jessie

Introducción Cacti es una herramienta de monitoreo y gráficos de código abierto que se basa completamente en datos RRD. A través de Cacti, puedes monitorear casi cualquier tipo de dispositivo

Cómo instalar Java 8 y DCEVM en Debian 8 (Jessie)

Cómo instalar Java 8 y DCEVM en Debian 8 (Jessie)

Java es un lenguaje de programación / máquina virtual independiente de la plataforma. En este tutorial, instalaremos la implementación de OpenJDK de Java 8 en un Debian

Servidor HTTP Git con Nginx en Debian 8

Servidor HTTP Git con Nginx en Debian 8

Git es un sistema de control de versiones (VCS) que permite el seguimiento de cambios en el código. En este tutorial, veremos cómo instalar un servidor HTTP (S) Git, un

Uso de vistas MySQL en Debian 7

Uso de vistas MySQL en Debian 7

Introducción MySQL tiene una gran característica conocida como vistas. Las vistas son consultas almacenadas. Piense en ellos como un alias para una consulta larga. En esta guía,

How to Install Matomo Analytics on Debian 9

How to Install Matomo Analytics on Debian 9

Using a Different System? Matomo (formerly Piwik) is an open source analytics platform, an open alternative to Google Analytics. Matomo source is hosted o

Instale el servidor web Hiawatha con PHP-FPM y MySQL en Debian

Instale el servidor web Hiawatha con PHP-FPM y MySQL en Debian

Hiawatha es un servidor web que tiene en cuenta la simplicidad, la facilidad de uso y la seguridad. Es la solución perfecta para servidores más pequeños, hardware antiguo o incrustación

Monitoree el estado del servidor Debian con Munin

Monitoree el estado del servidor Debian con Munin

Munin es una herramienta de monitoreo para examinar procesos y recursos en su máquina y presenta la información en gráficos a través de una interfaz web. Usa el siguiente

Instale un servidor FTP con ProFTPd en Debian o Ubuntu

Instale un servidor FTP con ProFTPd en Debian o Ubuntu

¿Usando un sistema diferente? En esta guía, veremos cómo configurar un servidor FTP (ProFTPd) para transferir archivos entre su PC y su servidor.

Instalar TaskServer (taskd) en Debian 9

Instalar TaskServer (taskd) en Debian 9

¿Usando un sistema diferente? TaskWarrior es una herramienta de gestión de tiempo de código abierto que es una mejora en la aplicación Todo.txt y sus clones. Debido a th

Upgrading Debian 9 to Debian 10

Upgrading Debian 9 to Debian 10

Introduction Debian 10 (Buster), is the successor to Debian 9 (Stretch). It was released on July 6, 2019. In this tutorial, we will be upgrading an existin

Agregue rango de direcciones IP a su servidor (CentOS / Ubuntu / Debian)

Agregue rango de direcciones IP a su servidor (CentOS / Ubuntu / Debian)

Introducción En este tutorial, cubriremos el proceso de agregar un rango / subred de IP completo a un servidor Linux que ejecuta CentOS, Debian o Ubuntu. El proceso

Instalar Plesk en Debian 8 (Jessie)

Instalar Plesk en Debian 8 (Jessie)

¿Usando un sistema diferente? Plesk es un panel de control de alojamiento web patentado que permite a los usuarios administrar sus sitios web y bases de datos personales y / o de clientes

¿Puede la IA luchar con un número cada vez mayor de ataques de ransomware?

¿Puede la IA luchar con un número cada vez mayor de ataques de ransomware?

Los ataques de ransomware van en aumento, pero ¿puede la IA ayudar a lidiar con el último virus informático? ¿Es la IA la respuesta? Lea aquí, sepa que la IA es una bendición o una perdición

ReactOS: ¿Es este el futuro de Windows?

ReactOS: ¿Es este el futuro de Windows?

ReactOS, un sistema operativo de código abierto y gratuito, está aquí con la última versión. ¿Puede satisfacer las necesidades de los usuarios de Windows de hoy en día y acabar con Microsoft? Averigüemos más sobre este estilo antiguo, pero una experiencia de sistema operativo más nueva.

Manténgase conectado a través de la aplicación de escritorio WhatsApp 24 * 7

Manténgase conectado a través de la aplicación de escritorio WhatsApp 24 * 7

Whatsapp finalmente lanzó la aplicación de escritorio para usuarios de Mac y Windows. Ahora puede acceder a Whatsapp desde Windows o Mac fácilmente. Disponible para Windows 8+ y Mac OS 10.9+

¿Cómo puede la IA llevar la automatización de procesos al siguiente nivel?

¿Cómo puede la IA llevar la automatización de procesos al siguiente nivel?

Lea esto para saber cómo la Inteligencia Artificial se está volviendo popular entre las empresas de pequeña escala y cómo está aumentando las probabilidades de hacerlas crecer y dar ventaja a sus competidores.

La actualización complementaria de macOS Catalina 10.15.4 está causando más problemas que resolver

La actualización complementaria de macOS Catalina 10.15.4 está causando más problemas que resolver

Recientemente, Apple lanzó macOS Catalina 10.15.4, una actualización complementaria para solucionar problemas, pero parece que la actualización está causando más problemas que conducen al bloqueo de las máquinas Mac. Lee este artículo para obtener más información

13 Herramientas comerciales de extracción de datos de Big Data

13 Herramientas comerciales de extracción de datos de Big Data

13 Herramientas comerciales de extracción de datos de Big Data

¿Qué es un sistema de archivos de diario y cómo funciona?

¿Qué es un sistema de archivos de diario y cómo funciona?

Nuestra computadora almacena todos los datos de una manera organizada conocida como sistema de archivos de diario. Es un método eficiente que permite a la computadora buscar y mostrar archivos tan pronto como presiona buscar.

Singularidad tecnológica: ¿un futuro lejano de la civilización humana?

Singularidad tecnológica: ¿un futuro lejano de la civilización humana?

A medida que la ciencia evoluciona a un ritmo rápido, asumiendo muchos de nuestros esfuerzos, también aumentan los riesgos de someternos a una singularidad inexplicable. Lea, lo que la singularidad podría significar para nosotros.

Una mirada a 26 técnicas analíticas de Big Data: Parte 1

Una mirada a 26 técnicas analíticas de Big Data: Parte 1

Una mirada a 26 técnicas analíticas de Big Data: Parte 1

El impacto de la inteligencia artificial en la atención médica 2021

El impacto de la inteligencia artificial en la atención médica 2021

La IA en la salud ha dado grandes pasos desde las últimas décadas. Por tanto, el futuro de la IA en el sector sanitario sigue creciendo día a día.