NodeBB - Node.js Forensoftware

28.01.2020
In diesem Beitrag möchte ich euch zeigen, wie ihr unter Debian 10 'buster' ein Forum mit NodeBB aufsetzen könnt. NodeBB ist eine Open Source Foren-Software auf Basis von Node.js. Die moderne Software ist vollständig responsiv und unterstützt Themes und Plugins. Ihr benötigt für den Betrieb allerdings zwingend einen eigenen Server oder vServer, da Node.js in der Regel bei einer normalen Webspace nicht verfügbar ist und auch nicht nachträglich bereitgestellt wird.

Kleine Eigenwerbung: Wenn ihr ein NodeBB Forum betreiben möchtet, aber euch das Administrieren eines Servers nicht zutraut, könnt ihr euch gerne mein Webspace Angebot anschauen. Ihr erhaltet dort eine Webspace auf einem eigenem vServer, daher können problemlos zusätzliche Dienste wie Node.js installiert werden. Natürlich kann ich gerne auch direkt beim Aufsetzen NodeBB für euch einrichten, dann könnt ihr sofort loslegen.

Hinweis: Ihr benötigt für viele oder alle Schritte dieser Anleitung einen User mit sudo Rechten oder den root User. Ich nutze den root User, tut ihr dies nicht, müsst ihr bei den angegebenen Befehlen "sudo" voranstellen, z.B. "sudo apt update".

Sprungmarken: Node.js MongoDB NodeBB Nginx & TLS Zertifikat

Server Update

Bevor ihr mit der eigentlichen Anleitung beginnt, solltet ihr vorab den Server updaten!

apt update && apt dist-upgrade && apt autoremove && apt clean

Mit dieser Befehls-Kombination aktualisiert ihr die Paketquellen, sucht nach Upgrades für installierte Pakete, entfernt überflüssige Abhängigkeiten und leert den Paket-Cache. "dist-upgrade" hat gegenüber "upgrade" den Vorteil, dass zusätzlich geprüft wird, ob durch geänderte Abhängigkeiten bestimmte Pakete deinstalliert bzw. neu installiert werden sollten.

Node.js

Bevor ihr NodeBB installieren könnt, benötigt ihr natürlich zuerst Node.js. Dafür solltet ihr zuerst das NodeSource Repository hinterlegen, um eine aktuelle Version zu erhalten. Ihr benötigt einen root User oder einen User mit sudo Rechten.

curl -sL https://deb.nodesource.com/setup_10.x | bash -

Anschließend aktualisiert ihr die Paketquellen und installiert Node.js.

apt -y install nodejs

Kontrolliert anschließend noch die installierten Versionen von Node.js und npm, es sollte Version 10.x und 6.x installiert sein.

node -v ; npm -v

Das war auch schon Alles für Node.js.

MongoDB

Als nächstes müsst ihr noch MongoDB als Datenbank für NoteBB installieren. Alternativ kann auch Redis verwendet werden, ich empfehle aber MongoDB zu nutzen. Der Geschwindigkeitsunterschied ist eher gering, dafür benötigt Redis aber mehr RAM. Für sehr große Foren kann es interessant sein, beides zu verwenden (Clustering), das ist aber ein eher fortgeschrittenes Thema. Ihr solltet nun also MongoDB installieren. Dafür installiert ihr GnuPG (für den GPG Schlüssel benötigt), hinterlegt einen apt-key und die offizielle MongoDB Repository, aktualisiert anschließend die Paketquellen, installiert schlussendlich MongoDB und kontrolliert die installiere Version.

apt -y install gnupg2
wget -qO - https://www.mongodb.org/static/pgp/server-4.2.asc | apt-key add -
echo "deb http://repo.mongodb.org/apt/debian buster/mongodb-org/4.2 main" | tee /etc/apt/sources.list.d/mongodb-org-4.2.list
apt update
apt -y install mongodb-org
mongod --version

Die angezeigte "db version" sollte v4.x sein. Hat alles geklappt, könnt ihr MongoDB starten.

systemctl start mongod

Nun geht es an die Konfiguration und Vorbereitung der Datenbank. Greift dafür auf MongoDB zu und wechselt zur admin Datenbank.

mongo
use admin

Nun erstellen wir einen Admin User (der ist noch nicht für NodeBB!).

db.createUser( { user: "admin", pwd: "PASSWORD", roles: [ { role: "root", db: "admin" } ] } )

Ihr solltet PASSWORD natürlich durch ein sicheres Passwort eurer Wahl ersetzen!

Anschließend erstellt ihr die Datenbank und einen User für NodeBB und schließt dann die Verbindung zu MongoDB.

use nodebb
db.createUser( { user: "nodebb", pwd: "PASSWORD", roles: [ { role: "readWrite", db: "nodebb" }, { role: "clusterMonitor", db: "admin" } ] } )
quit()

Auch hier bitte PASSWORD durch ein sicheres Passwort eurer Wahl ersetzen!

Nun solltet ihr noch die Datenbank Autorisierung in der MongoDB Konfiguration unter /etc/mongod.conf aktivieren.

nano /etc/mongod.conf

Ergänzt in dieser Datei folgende Zeilen:

security:
  authorization: enabled

Startet nun MongoDB neu und fügt es dem Autostart hinzu. Testet anschließend die Verbindung mit dem Admin User und eurem vergebenen Passwort.

systemctl restart mongod && systemctl enable mongod
mongo -u admin -p 'PASSWORD' --authenticationDatabase=admin

Ihr solltet nun eine Verbindung zu MongoDB haben. Ihr könnt die Verbindung dann wieder schließen und seid auch mit diesem Teil fertig.

quit()

NodeBB

Nachdem ihr euren Server vorbereitet habt, könnt ihr nun NodeBB installieren. Falls noch nicht auf dem Server vorhanden, solltet ihr zuerst git installieren, um NodeBB von Github zu klonen.

apt -y install git

Wechselt nun in das Verzeichnis, in dem ihr NodeBB installieren wollt und klont die Software von Github.

cd /var/www/
git clone -b v1.13.x https://github.com/NodeBB/NodeBB.git nodebb

Nun wechselt in das neue nodebb Verzeichnis und startet das Setup.

cd /var/www/nodebb
./nodebb setup

Ihr müsst im Laufe des Setup einige Fragen beantworten, diese habe ich nachfolgend für euch aufgeführt.

  • URL; gebt hier unbedingt die vollständige URL an, unter der euer Forum erreichbar sein soll, z.B. https://domain.tld oder https://forum.domain.tld.
  • Secret; ihr könnt ein eigenes Secret eingeben oder einfach Enter drücken, um das in Klammern angezeigte zu nutzen.
  • Anonymius Plugin Usage; "no" eingeben, wenn ihr keine anonymisierten Daten über die Verwendung von Plugins senden wollt. Ansonsten drückt Enter.
  • Database; drückt einfach Enter, um MongoDB als Datenbank einzustellen.
  • MongoDB connection URI; Hier ebenfalls einfach Enter drücken, um anschließend einzeln die Daten eurer Datenbank anzugeben.
    • IP; Enter drücken (localhost)
    • Port; Enter drücken (Standardport)
    • Username; "nodebb" angeben (sofern ihr den im MongoDB Abschnitt nicht geändert hattet)
    • Password; euer oben vergebenes Passwort eintragen
    • Database; Enter drücken (nodebb)
  • Administrator; hier erstellt ihr euren Admin Account für das Forum. Gebt einen Usernamen, eine Mailadresse und ein Passwort für den Account ein.

Damit habt ihr NodeBB erfolgreich konfiguriert. Wollt ihr später etwas anpassen, könnt ihr das in der Datei config.json im nodebb Ordner.

Ihr könnt NodeBB nun erstmals starten!

./nodebb start

Im Browser könnt ihr nun die im Setup angegebene URL mit dem Port aufrufen, um an euer Forum zu kommen: http://domain.tld:4567

Hinweis: Auch wenn ihr oben eine https URL angegeben habt, könnt ihr es zum testen erstmal mit http aufrufen, da ihr noch kein Zertifikat habt. Einloggen könnt ihr euch aber noch nicht!

Nginx & TLS Zertifikat

Eigentlich seid ihr bereits fertig mit der Einrichtung von NodeBB. Allerdings möchtet ihr das Forum für den produktiven Einsatz vermutlich ohne Angabe des Ports und mit https aufrufen können. Daher zeige ich euch noch, wie ihr Nginx als Proxy einrichtet und ein TLS Zertifikat mit Certbot (Lets Encrypt) erstellt. Ihr müsst nun erstmal Nginx und Certbot installieren.

apt -y install nginx certbot python-certbot-nginx

Nun könnt ihr ein TLS Zertifikat für eure Domain/Subdomain beantragen.

certbot certonly --rsa-key-size 4096 -d domain.tld -d www.domain.tld --nginx

Wenn ihr das erste Mal ein Zertifikat beantragt, müsst ihr eine E-Mail Adresse angeben, den ToS zustimmen und Entscheiden ob ihr die E-Mail Adresse mit Partnern von Lets Encrypt teilen wollt (N für ablehnen).

Anschließend erstellt ihr eine Seiten-Konfiguration für euer NodeBB Forum unter /etc/nginx/sites-available/.

nano /etc/nginx/sites-available/nodebb

Dort tragt ihr die folgenden Angaben ein (domain.tld zu eurer Domain ändern!):

server {
  listen 80;
  server_name www.domain.tld domain.tld;
  return 301 https://domain.tld$request_uri;
}
server {
  listen 443 ssl;
  server_name www.domain.tld;
  ssl_certificate /etc/letsencrypt/live/domain.tld/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/domain.tld/privkey.pem;
  return 301 https://domain.tld$request_uri;
}
server {
  listen 443 ssl http2;
  server_name domain.tld;
  ssl_certificate /etc/letsencrypt/live/domain.tld/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/domain.tld/privkey.pem;
  ssl_prefer_server_ciphers on;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
  ssl_session_cache shared:SSL:5m;
  ssl_session_timeout 30m;
  access_log /var/log/nginx/domain.tld_access.log;
  error_log /var/log/nginx/domain.tld_error.log error;
  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;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
  }
}

Wenn ihr nur eine Subdomain (forum.domain.tld) konfigurieren wollt, müsst ihr den 2. server {} Block entfernen, um eine Endlos-Schleife zu vermeiden.

Nun müsst ihr die Konfiguration unter /etc/nginx/sites-available/ verknüpfen und nginx neustarten.

ln -s /etc/nginx/sites-available/nodebb /etc/nginx/sites-enabled/nodebb
service nginx restart

Das wars! Ihr solltet nun euer NodeBB unter https://domain.tld aufrufen können

Ihr könnt euch nun auch mit dem im Setup erstellten Admin Account im Forum einloggen. Die Sprache sollte automatisch erkannt werden. Wenn ihr die Standardsprache auf Deutsch stellen wollt, navigiert zu Admin > General > Languages und wählt als Default Language "Deutsch (de)" aus und speichert die Einstellung ab. Auch die automatische Erkennung der Sprache kann dort deaktiviert werden. Wenn ihr ein rein deutschsprachiges Forum betreiben wollt, ist das auch durchaus zu empfehlen.

Hinweis: Ich zeige hier bewusst nur das Minimum an nötiger Konfiguration für die Nutzung von Nginx. Wenn euch dahingehend weitere Informationen zur Konfiguration interessieren, könnt ihr euch gerne meinen Beitrag Webserver mit Nginx, PHP7 & MariaDB anschauen.

Zuletzt bearbeitet: 01.02.2020