NodeBB è un software per forum basato su Node.js. Utilizza socket Web per interazioni istantanee e notifiche in tempo reale. Il codice sorgente di NodeBB è ospitato pubblicamente su Github . Questa guida ti guiderà attraverso il processo di installazione di NodeBB su una nuova istanza di FreeBSD 12 Vultr, usando Node.js, MongoDB come database, Nginx come proxy inverso e Acme.sh per i certificati SSL.
Requisiti
NodeBB richiede l'installazione del seguente software:
- Node.js versione 6.9.0 o successiva
- MongoDB versione 2.6 o successiva
- nginx
- Idiota
- Almeno 1024 MB di RAM
- Nome dominio con
A
/ AAAA
record impostati
Prima di iniziare
Controlla la versione di FreeBSD.
uname -ro
# FreeBSD 12.0-RELEASE
Assicurati che il tuo sistema FreeBSD sia aggiornato.
freebsd-update fetch install
pkg update && pkg upgrade -y
Installa i pacchetti necessari se non sono presenti sul tuo sistema.
pkg install -y sudo vim unzip wget git bash socat gcc8 pkgconf vips
Crea un nuovo account utente con il tuo nome utente preferito (useremo 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!
Esegui il visudo
comando e decommenta la %wheel ALL=(ALL) ALL
riga per consentire ai membri del wheel
gruppo di eseguire qualsiasi comando.
visudo
# Uncomment by removing hash (#) sign
# %wheel ALL=(ALL) ALL
Ora passa al nuovo utente creato con su
.
su - johndoe
NOTA: sostituisci johndoe
con il tuo nome utente.
Imposta il fuso orario.
sudo tzsetup
Installa Node.js
NodeBB è gestito da Node.js e quindi deve essere installato. Si consiglia l'installazione dell'attuale versione LTS di Node.js.
Installa Node.js e npm.
sudo pkg install -y node10 npm-node10
Controlla le versioni.
node -v && npm -v
# v10.15.3
# 6.9.0
MongoDB è il database predefinito per NodeBB.
Installa MongoDB.
sudo pkg install -y mongodb40
Controlla la versione
mongo --version | head -n 1 && mongod --version | head -n 1
# MongoDB shell version v4.0.6
# db version v4.0.6
Abilita e avvia MongoDB.
sudo sysrc mongod_enable=yes
sudo service mongod start
Creare un database e un utente per NodeBB.
Connettiti prima a MongoDB.
mongo
Passa al admin
database integrato .
> use admin
Crea un utente amministrativo.
> db.createUser( { user: "admin", pwd: "<Enter a secure password>", roles: [ { role: "readWriteAnyDatabase", db: "admin" }, { role: "userAdminAnyDatabase", db: "admin" } ] } )
NOTA: sostituire il segnaposto <Enter a secure password>
con la propria password selezionata.
Aggiungi un nuovo database chiamato nodebb
.
> use nodebb
Il database verrà creato e il contesto verrà cambiato nodebb
. Quindi creare l' nodebb
utente con i privilegi appropriati.
> db.createUser( { user: "nodebb", pwd: "<Enter a secure password>", roles: [ { role: "readWrite", db: "nodebb" }, { role: "clusterMonitor", db: "admin" } ] } )
NOTA: ancora una volta, sostituire il segnaposto <Enter a secure password>
con la propria password selezionata.
Esci dal guscio di Mongo.
> quit()
Riavvia MongoDB e assicurati che l'utente amministrativo creato in precedenza possa connettersi.
sudo service mongod restart
mongo -u admin -p your_password --authenticationDatabase=admin
Installa Nginx.
sudo pkg install -y nginx
Controlla la versione
nginx -v
# nginx version: nginx/1.14.2
Abilita e avvia Nginx.
sudo sysrc nginx_enable=yes
sudo service nginx start
NodeBB per impostazione predefinita viene eseguito sulla porta 4567
. Per evitare la digitazione http://example.com:4567
, configureremo Nginx come proxy inverso per l'applicazione NodeBB. Ogni richiesta sulla porta 80
o 443
, se si utilizza SSL, verrà inoltrata alla porta 4567
.
Eseguilo sudo vim /usr/local/etc/nginx/nodebb.conf
e popolalo con la configurazione di base del proxy inverso di seguito.
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";
}
}
Nella configurazione precedente, aggiorna la server_name
direttiva con il tuo dominio / nome host.
Salvare il file e uscire con :+ W+ Q.
Ora dobbiamo includere nodebb.conf
nel nginx.conf
file principale .
Esegui sudo vim /usr/local/etc/nginx/nginx.conf
e aggiungi la seguente riga al http {}
blocco.
include nodebb.conf;
Controlla la configurazione.
sudo nginx -t
Ricarica Nginx.
sudo service nginx reload
Installa il client Acme.sh e ottieni un certificato Let's Encrypt (opzionale)
Non è necessario proteggere il tuo forum con HTTPS, ma proteggerà il traffico del tuo sito. Acme.sh è un software di shell unix puro per ottenere certificati SSL da Let's Encrypt con zero dipendenze.
Scarica e installa 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 ~
Controlla la versione
/etc/letsencrypt/acme.sh --version
# v2.8.1
Ottieni i certificati RSA ed ECDSA per 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
Dopo aver eseguito i comandi sopra, i certificati e le chiavi saranno in:
- RSA:
/etc/letsencrypt/forum.example.com
.
- ECC / ECDSA:
/etc/letsencrypt/forum.example.com_ecc
.
Dopo aver ottenuto i certificati da Let's Encrypt, dobbiamo configurare Nginx per usarli.
Eseguire di sudo vim /usr/local/etc/nginx/nodebb.conf
nuovo e configurare Nginx come proxy inverso 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";
}
}
Controlla la configurazione.
sudo nginx -t
Ricarica Nginx.
sudo service nginx reload
Installa NodeBB
Creare una directory radice del documento.
sudo mkdir -p /usr/local/www/nodebb
Cambia la proprietà della /usr/local/www/nodebb
directory in johndoe
.
sudo chown -R johndoe:johndoe /usr/local/www/nodebb
Passare alla cartella principale del documento.
cd /usr/local/www/nodebb
Clonare l'ultimo NodeBB nella cartella principale del documento.
git clone -b v1.11.x https://github.com/NodeBB/NodeBB.git .
Eseguire il comando di installazione NodeBB e rispondere a ogni domanda quando richiesto.
./nodebb setup
Al termine dell'installazione di NodeBB, eseguire ./nodebb start
per avviare manualmente il server NodeBB.
./nodebb start
Dopo questo comando, sarai in grado di accedere all'istanza del forum NodeBB in un browser web.
Esegui NodeBB con PM2
Se avviato tramite ./nodebb start
, NodeBB non si riavvierà automaticamente al riavvio del sistema. Per evitarlo, dovremo configurare NodeBB come servizio di sistema.
Se in esecuzione, arrestare NodeBB.
./nodebb stop
Installa PM2 a livello globale.
sudo npm install pm2 -g
Controlla la versione
pm2 -v
# 3.5.0
Passare alla radice del documento NodeBB.
cd /usr/local/www/nodebb
Avviare NodeBB tramite PM2.
pm2 start app.js
Elencare il processo NodeBB.
pm2 ls
Rileva il sistema init disponibile.
pm2 startup
Copia e incolla l'output di questo comando nella CLI per configurare il tuo hook di avvio.
Salva l'elenco dei processi.
pm2 save
Questo è tutto. L'istanza di NodeBB è ora attiva e funzionante.