installeer je NodeBB Forum met Nginx en Let’s Encrypt SSL op Ubuntu 20.04 LTS

NodeBB is een moderne forum software aangedreven door Node.js die MongoDB/Redis gebruikt als databank platforms. Het gebruikt web sockets voor directe interacties en real-time meldingen.

In deze handleiding leren we hoe je een NodeBB forum kunt installeren op een Ubuntu 20.04 gebaseerde server.

Vereisten

  • Een Ubuntu 20.04 gebaseerde server met een niet-root gebruiker met sudo privileges.

  • Minimaal 2GB RAM. Als je server slechts 1GB RAM heeft, kun je het beste een swap partitie inschakelen.

  • Zorg ervoor dat alles bijgewerkt is.

    $ sudo apt update && sudo apt upgrade
    
  • Enkele essentiële pakketten. Sommige daarvan zullen al op je server staan.

    $ sudo apt install curl wget nano ca-certificates gnupg2 lsb-release
    

Stap 1 - Firewall instellen

De eerste stap is het instellen van de firewall. Ubuntu wordt standaard geleverd met ufw (Uncomplicated Firewall).

Controleer of de firewall draait.

$ sudo ufw status

Je zou de volgende uitvoer moeten krijgen.

Status: inactive

Sta SSH poort toe, zodat de firewall de huidige verbinding niet verbreekt bij het inschakelen ervan.

$ sudo ufw allow OpenSSH

Sta 27017 poort toe voor de MongoDB server en 4567 poort voor het runnen van het NodeBB forum. Sta ook HTTP en HTTPS poorten toe.

$ sudo ufw allow 27017
$ sudo ufw allow 4567
$ sudo ufw allow 80
$ sudo ufw allow 443

Schakel de firewall in.

$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

Controleer opnieuw de status van de firewall.

$ sudo ufw status

Je zou een gelijkaardige uitvoer moeten zien.

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
27017                      ALLOW       Anywhere
4567                       ALLOW       Anywhere
80                         ALLOW       Anywhere
443                        ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
27017 (v6)                 ALLOW       Anywhere (v6)
4567 (v6)                  ALLOW       Anywhere (v6)
80 (v6)                    ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)

Stap 2 - Installeer Node.js

We zullen hier de LTS versie van Node.js installeren. Voer de volgende commando's uit om Node.js te installeren.

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

Controleer of Node goed geïnstalleerd is.

$ node --version

Je zou een soortgelijke uitvoer moeten zien.

v12.18.3

Controleer ook npm.

$ npm --version
6.14.6

Stap 3 - Installeer MongoDB

MongoDB is de standaard databank voor NodeBB. Je kunt ook Redis gebruiken in plaats van MongoDB. We zullen beide databases in onze handleiding behandelen.

De repository van MongoDB voor Ubuntu 20.04 is nog niet klaar en Ubuntu zelf draagt een erg oude versie. Voor ons doel zullen we de MongoDB repository voor 18.04 gebruiken, die prima werkt. Je kunt de pakketlijst bijwerken met de nieuwste repository zodra officiële ondersteuning beschikbaar is.

Importeer de publieke sleutel voor MongoDB.

$ wget -qO - https://www.mongodb.org/static/pgp/server-4.2.asc | sudo apt-key add -

Voeg de MongoDB repository toe.

$ echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.2.list

Werk de lokale pakketdatabase bij.

$ sudo apt update

Installeer MongoDB.

$ sudo apt install mongodb-org

Verifieer de installatie van MongoDB.

$ mongod --version
db version v4.2.8
...

Start de MongoDB dienst.

$ sudo systemctl start mongod

Schakel de MongoDB dienst in.

$ sudo systemctl enable mongod

Controleer de status van de MongoDB dienst.

$ sudo systemctl status mongod

Stap 4 - MongoDB instellen

Mongo beheer gebeurt via de MongoDB shell. De standaard installatie van MongoDB luistert op poort 27017.

Ga naar de MongoDB shell.

$ mongo

Schakel over naar de ingebouwde admin databank.

> use admin

Maak een administratieve gebruiker aan. Dit is niet dezelfde als de NodeBB admin gebruiker.

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

Verander de plaatshouder “yourpassword” in je eigen wachtwoord.

Voeg een nieuwe databank voor NodeBB toe.

> use nodebb

Maak vervolgens de gebruiker nodebb aan om de database nodebb te beheren.

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

De readwrite toestemming staat NodeBB toe gegevens op te slaan en op te halen uit de nodebb databank. De clustermonitor toestemming geeft NodeBB alleen-lezen toegang tot de databasestatistieken die zichtbaar zijn via zijn Admin paneel.

Verlaat de Mongo shell.

> quit()

Open het MongoDB configuratiebestand om het te bewerken.

$ sudo nano /etc/mongod.conf

Voeg de volgende regel toe aan het eind van het bestand.

security:
  authorization: enabled

Start MongoDB opnieuw op en controleer de eerder aangemaakte administratieve gebruiker.

$ sudo systemctl restart mongod
$ mongo -u admin -p yourpassword --authenticationDatabase=admin

Je zou de Mongo prompt moeten zien als alles correct werd geconfigureerd.

Stap 5 - Git installeren

Voor we verder gaan met de installatie van NodeBB, moeten we Git installeren.

Voer het volgende commando uit om Git te installeren.

$ sudo apt install git

Voer de volgende commando's uit om de eerste configuratie van Git uit te voeren.

$ git config --global user.name "Your Name"
$ git config --global user.email "[email protected]"

Stap 6 - Installeer NodeBB

Het is niet aan te raden NodeBB als de root gebruiker te draaien.

Maak een ongeprivilegieerde gebruiker aan.

$ sudo adduser nodebb

Stel een wachtwoord naar keuze in en sla de andere opties over.

Maak de map waar je NodeBB forum komt te staan.

$ sudo mkdir /var/www/nodebb

Verander het eigendom van de map in de nieuw aangemaakte gebruiker.

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

Log in op de nieuw aangemaakte gebruiker.

$ su nodebb

Ga naar de NodeBB installatiemap.

$ cd /var/www/nodebb

Om NodeBB te installeren moeten we eerst de Github repository klonen.

Kloon NodeBB naar de /var/www/nodebb map. De punt aan het eind van het commando verwijst naar de huidige directory.

$ git clone -b v1.14.2 https://github.com/NodeBB/NodeBB.git .

Hier hebben we de v1.14.2 van NodeBB gekloond, wat de laatste stabiele versie was op het moment van schrijven van de handleiding. Je kunt de laatste stabiele branch vinden op NodeBB's Latest Release pagina.

NodeBB wordt geleverd met een command-line hulpprogramma. Gebruik het volgende commando om NodeBB te installeren.

$ ./nodebb setup

Je kunt op enter drukken om de standaardwaarde te kiezen.

Kies voor de waarde van URL die gebruikt wordt om dit NodeBB te benaderen de uiteindelijke URL, waar je het forum op wilt benaderen. Als je het forum via het IP van je server wilt benaderen, voer dat dan in of voer het volledige domein van het forum in. Hier voeren we http://forum.example.com in .

Blijf standaardwaarden kiezen tot je gevraagd wordt om de gebruikersnaam voor MongoDB, dat is wanneer je nodebb invoert en het wachtwoord dat je eerder voor die gebruikersnaam koos bij het configureren van MongoDB. Je database nodebb moet gekozen zijn. Je wordt ook gevraagd een administrator gebruiker aan te maken en de gegevens daarvan.

Als de instelling voltooid is, voer je het volgende commando uit om NodeBB te starten.

$ ./nodebb start

Je forum draait nu. Je zou het moeten kunnen benaderen via http://<yourserverip>:4567.

Het kan zijn dat je een foutmelding ziet met de tekst Looks like your connection to NodeBB was lost, please wait while we try to reconnect. Dat lijkt te komen omdat we de standaard URL kozen voor NodeBB http://forum.example.com en niet voor http://<yourserverip. Maar als je tijdens de setup het IP adres invult, krijg je de foutmelding niet meer, maar moet je later opnieuw configureren nadat je een domein voor je forum gekozen hebt.

Sluit de NodeBB gebruiker af.

$ exit

Stap 7 - Installeer Nginx

Ubuntu 20.04 draagt standaard de nieuwste stabiele versie van Nginx. We zullen dat installeren.

$ sudo apt install nginx

Controleer of het goed geïnstalleerd is.

$ nginx -v
nginx version: nginx/1.18.0 (Ubuntu)

Start Nginx en schakel het in.

$ sudo systemctl start nginx
$ sudo systemctl enable nginx

Open het IP adres van je server in je web browser. Je zou de volgende pagina moeten zien, wat betekent dat je server up and running is.

Stap 8 - Configureer Nginx

Voer het volgende commando uit om een configuratiebestand voor je site toe te voegen.

$ sudo nano /etc/nginx/sites-available/nodebb.conf

Plak de volgende code in de editor.

server {
    listen 80;

    server_name forum.example.com;
    
    access_log /var/log/nginx/forum.example.com.access.log;
    error_log /var/log/nginx/forum.example.com.error.log;

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

Druk op Ctrl + X om de editor te verlaten en voer Y in als daarom gevraagd wordt.

Als je klaar bent, controleer je of de Nginx configuratie juist is.

$ sudo nginx -t

Herlaad Nginx service om de configuratie in te schakelen.

$ sudo systemctl reload nginx

Ga in je browser naar http://forum.example.com om het NodeBB forum te openen.

Stap 9 - Draai NodeBB als systeemdienst

De NodeBB dienst loopt niet meer na een herstart van het systeem. Om te voorkomen dat NodeBB elke keer start, moeten we het als een Systeemdienst installeren.

Stop eerst de NodeBB dienst.

$ ./nodebb stop

Voer het volgende commando uit om het configuratiebestand nodebb.service systemd unit aan te maken en te bewerken.

$ sudo nano /etc/systemd/system/nodebb.service

Plak de volgende code in de editor.

[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

Hier hebben we de gebruikersnaam gekozen als nodebb die we in stap 6 aanmaakten en het pad dat we gekozen hebben om er NodeBB in te installeren.

Schakel de NodeBB dienst in.

$ sudo systemctl enable nodebb

Start de NodeBB dienst.

$ sudo systemctl start nodebb

Controleer de status van de dienst.

$ sudo systemctl status nodebb

Stap 10 - Verkrijg een Let's Encrypt SSL certificaat

Je NodeBB forum beveiligen met HTTPS is een noodzakelijke stap om het verkeer op je site te beveiligen. Voor deze handleiding gebruiken we het Certbot programma om SSL te installeren.

Installeer daarvoor eerst het Certbot gereedschap.

$ sudo apt install certbot python3-certbot-nginx

Genereer de certificaten.

$ sudo certbot --nginx -d forum.example.com

Als dit de eerste keer is dat je Certbot op je systeem draait, wordt je gevraagd om een e-mail adres en om akkoord te gaan met de gebruiksvoorwaarden. Je wordt ook gevraagd of je ermee instemt gegevens te delen met stichting EFF, waar je nee op kunt zeggen. Als je dat gedaan hebt, communiceert Certbot met de Let's Encrypt servers en voert een uitdaging uit om je domeinen te verifiëren.

Als dat gelukt is, wordt je gevraagd hoe je HTTPS omleidingen wilt afhandelen.

Please choose whether HTTPS access is required or optional.
-------------------------------------------------------------------------------
1: Easy - Allow both HTTP and HTTPS access to these sites
2: Secure - Make all requests redirect to secure HTTPS access
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

Kies Secure en druk op enter. Dit zorgt ervoor dat alle verzoeken aan http domeinen goed worden doorgestuurd naar de https versie. Je certificaten worden dan aangemaakt en je Nginx configuratiebestanden worden bijgewerkt met SSL instellingen.

Je certificaten zijn klaar en je kunt je site nu openen door te gaan naar https://forum.example.com

Stap 11 - Verifieer SSL auto-vernieuwing

Dit is de laatste stap voor we deze handleiding beëindigen.

Controleer het vernieuwingsproces door het even droog te draaien.

$ sudo certbot renew --dry-run

Als je geen fouten krijgt, betekent dit dat je klaar bent. Certbot zal automatisch je certificaten voor je vernieuwen. Je krijgt een waarschuwing per e-mail over het verlopen van het certificaat.

Conclusie

Dat was alles voor deze handleiding. De installatie van je NodeBB forum is voltooid. Als je nog vragen hebt, stel ze dan in de commentaar hieronder.