NodeBB est un logiciel de forum basé sur Node.js. Il utilise des sockets Web pour des interactions instantanées et des notifications en temps réel. Le code source de NodeBB est hébergé publiquement sur Github . Ce guide vous guidera à travers le processus d'installation de NodeBB sur une nouvelle instance de FreeBSD 12 Vultr, en utilisant Node.js, MongoDB comme base de données, Nginx comme proxy inverse et Acme.sh pour les certificats SSL.
Exigences
NodeBB nécessite l'installation des logiciels suivants:
- Node.js version 6.9.0 ou supérieure
- MongoDB version 2.6 ou supérieure
- Nginx
- Git
- 1024 Mo de RAM minimum
- Nom de domaine avec
A
/ AAAA
enregistrements configurés
Avant que tu commences
Vérifiez la version de FreeBSD.
uname -ro
# FreeBSD 12.0-RELEASE
Assurez-vous que votre système FreeBSD est à jour.
freebsd-update fetch install
pkg update && pkg upgrade -y
Installez les packages nécessaires s'ils ne sont pas présents sur votre système.
pkg install -y sudo vim unzip wget git bash socat gcc8 pkgconf vips
Créez un nouveau compte utilisateur avec votre nom d'utilisateur préféré (nous utiliserons johndoe
).
adduser
# Username: johndoe
# Full name: John Doe
# Uid (Leave empty for default): <Enter>
# Login group [johndoe]: <Enter>
# Login group is johndoe. Invite johndoe into other groups? []: wheel
# Login class [default]: <Enter>
# Shell (sh csh tcsh nologin) [sh]: bash
# Home directory [/home/johndoe]: <Enter>
# Home directory permissions (Leave empty for default): <Enter>
# Use password-based authentication? [yes]: <Enter>
# Use an empty password? (yes/no) [no]: <Enter>
# Use a random password? (yes/no) [no]: <Enter>
# Enter password: your_secure_password
# Enter password again: your_secure_password
# Lock out the account after creation? [no]: <Enter>
# OK? (yes/no): yes
# Add another user? (yes/no): no
# Goodbye!
Exécutez la visudo
commande et décommentez la %wheel ALL=(ALL) ALL
ligne pour permettre aux membres du wheel
groupe d'exécuter n'importe quelle commande.
visudo
# Uncomment by removing hash (#) sign
# %wheel ALL=(ALL) ALL
Maintenant, passez à votre nouvel utilisateur avec su
.
su - johndoe
REMARQUE: remplacez johndoe
par votre nom d'utilisateur.
Configurez le fuseau horaire.
sudo tzsetup
Installez Node.js
NodeBB est piloté par Node.js et doit donc être installé. L'installation de la version LTS actuelle de Node.js est recommandée.
Installez Node.js et npm.
sudo pkg install -y node10 npm-node10
Vérifiez les versions.
node -v && npm -v
# v10.15.3
# 6.9.0
MongoDB est la base de données par défaut de NodeBB.
Installez MongoDB.
sudo pkg install -y mongodb40
Vérifiez la version.
mongo --version | head -n 1 && mongod --version | head -n 1
# MongoDB shell version v4.0.6
# db version v4.0.6
Activez et démarrez MongoDB.
sudo sysrc mongod_enable=yes
sudo service mongod start
Créez une base de données et un utilisateur pour NodeBB.
Connectez-vous d'abord à MongoDB.
mongo
Basculez vers la admin
base de données intégrée.
> use admin
Créez un utilisateur administratif.
> db.createUser( { user: "admin", pwd: "<Enter a secure password>", roles: [ { role: "readWriteAnyDatabase", db: "admin" }, { role: "userAdminAnyDatabase", db: "admin" } ] } )
REMARQUE: remplacez l'espace réservé <Enter a secure password>
par votre propre mot de passe sélectionné.
Ajoutez une nouvelle base de données appelée nodebb
.
> use nodebb
La base de données sera créée et le contexte basculera vers nodebb
. Créez ensuite l' nodebb
utilisateur avec les privilèges appropriés.
> db.createUser( { user: "nodebb", pwd: "<Enter a secure password>", roles: [ { role: "readWrite", db: "nodebb" }, { role: "clusterMonitor", db: "admin" } ] } )
REMARQUE: encore une fois, remplacez l'espace réservé <Enter a secure password>
par votre propre mot de passe sélectionné.
Quittez le shell Mongo.
> quit()
Redémarrez MongoDB et assurez-vous que l'utilisateur administratif créé précédemment peut se connecter.
sudo service mongod restart
mongo -u admin -p your_password --authenticationDatabase=admin
Installez Nginx.
sudo pkg install -y nginx
Vérifiez la version.
nginx -v
# nginx version: nginx/1.14.2
Activez et démarrez Nginx.
sudo sysrc nginx_enable=yes
sudo service nginx start
NodeBB s'exécute par défaut sur le port 4567
. Pour éviter de taper http://example.com:4567
, nous allons configurer Nginx comme proxy inverse pour l'application NodeBB. Chaque demande sur le port 80
ou 443
, si SSL est utilisé, sera transmise au port 4567
.
Exécutez-le sudo vim /usr/local/etc/nginx/nodebb.conf
et remplissez-le avec la configuration de base du proxy inverse ci-dessous.
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";
}
}
Dans la configuration ci-dessus, mettez à jour la server_name
directive avec votre domaine / nom d'hôte.
Enregistrez le fichier et quittez avec :+ W+ Q.
Maintenant, nous devons inclure nodebb.conf
dans le nginx.conf
fichier principal .
Exécutez sudo vim /usr/local/etc/nginx/nginx.conf
et ajoutez la ligne suivante au http {}
bloc.
include nodebb.conf;
Vérifiez la configuration.
sudo nginx -t
Recharger Nginx.
sudo service nginx reload
Installez le client Acme.sh et obtenez un certificat Let's Encrypt (facultatif)
Sécuriser votre forum avec HTTPS n'est pas nécessaire, mais cela sécurisera le trafic de votre site. Acme.sh est un logiciel shell Unix pur pour obtenir des certificats SSL à partir de Let's Encrypt sans aucune dépendance.
Téléchargez et installez 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 ~
Vérifiez la version.
/etc/letsencrypt/acme.sh --version
# v2.8.1
Obtenez les certificats RSA et ECDSA pour 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 service nginx reload" --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 service nginx reload" --keylength ec-256
Après avoir exécuté les commandes ci-dessus, vos certificats et clés seront dans:
- RSA:
/etc/letsencrypt/forum.example.com
.
- ECC / ECDSA:
/etc/letsencrypt/forum.example.com_ecc
.
Après avoir obtenu les certificats de Let's Encrypt, nous devons configurer Nginx pour les utiliser.
Réexécutez sudo vim /usr/local/etc/nginx/nodebb.conf
et configurez Nginx en tant que proxy inverse HTTPS.
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";
}
}
Vérifiez la configuration.
sudo nginx -t
Recharger Nginx.
sudo service nginx reload
Installer NodeBB
Créez un répertoire racine de document.
sudo mkdir -p /usr/local/www/nodebb
Changez la propriété du /usr/local/www/nodebb
répertoire en johndoe
.
sudo chown -R johndoe:johndoe /usr/local/www/nodebb
Accédez au dossier racine du document.
cd /usr/local/www/nodebb
Clonez le dernier NodeBB dans le dossier racine du document.
git clone -b v1.11.x https://github.com/NodeBB/NodeBB.git .
Exécutez la commande de configuration NodeBB et répondez à chaque question lorsque vous y êtes invité.
./nodebb setup
Une fois la configuration de NodeBB terminée, exécutez ./nodebb start
pour démarrer manuellement votre serveur NodeBB.
./nodebb start
Après cette commande, vous pourrez accéder à votre instance de forum NodeBB dans un navigateur Web.
Exécutez NodeBB avec PM2
Lorsqu'il est démarré via ./nodebb start
, NodeBB ne redémarrera pas automatiquement au redémarrage du système. Pour éviter cela, nous devrons configurer NodeBB en tant que service système.
S'il est en cours d'exécution, arrêtez NodeBB.
./nodebb stop
Installez PM2 globalement.
sudo npm install pm2 -g
Vérifiez la version.
pm2 -v
# 3.5.0
Accédez à la racine du document NodeBB.
cd /usr/local/www/nodebb
Démarrez NodeBB via PM2.
pm2 start app.js
Répertoriez le processus NodeBB.
pm2 ls
Détectez le système d'initialisation disponible.
pm2 startup
Copiez et collez la sortie de cette commande dans la CLI pour configurer votre hook de démarrage.
Enregistrez votre liste de processus.
pm2 save
C'est tout. Votre instance NodeBB est désormais opérationnelle.