Cómo instalar el foro NodeBB en Ubuntu 22.04

NodeBB es un moderno software de foros basado en el framework Node.js. Utiliza bases de datos MongoDB, PostgreSQL o Redis para almacenar datos. Utiliza web sockets para notificaciones en tiempo real e interacciones instantáneas. Tiene características modernas como integración con redes sociales, compatibilidad con plugins, capacidad de respuesta móvil y API REST completas de lectura/escritura.

NodeBB está disponible tanto como proyecto de autoalojamiento de código abierto como servicio en la nube. En este tutorial, aprenderás a instalar el foro NodeBB utilizando Nginx en un servidor Ubuntu 22.04. Ubuntu 22.04 no soporta oficialmente MongoDB; por lo tanto, utilizaremos PostgreSQL para almacenar datos.

Requisitos previos

  • Un servidor que ejecute Ubuntu 22.04 con un mínimo de 1GB de RAM.
  • Un usuario no root con privilegios sudo.
  • El cortafuegos sin complicaciones (UFW) está activado y en ejecución.
  • Un nombre de dominio totalmente cualificado (FQDN) que apunte al servidor como, por ejemplo, forum.example.com.
  • Todo está actualizado.
    $ sudo apt update && sudo apt upgrade
    

Paso 1 – Configurar el Cortafuegos

Antes de instalar ningún paquete, el primer paso es configurar el cortafuegos para que permita las conexiones HTTP y HTTPS.

Comprueba el estado del cortafuegos.

$ sudo ufw status

Deberías ver algo como lo siguiente

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)

Permitir puertos HTTP y HTTPs.

$ sudo ufw allow http
$ sudo ufw allow https

Comprueba de nuevo el estado para confirmarlo.

$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443                        ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)

Paso 2 – Instalar PostgreSQL

El primer paso para instalar PostgreSQL es añadir su clave GPG.

$ curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | sudo tee /usr/share/keyrings/postgresql-key.gpg >/dev/null

Añade el repositorio APT a tu lista de fuentes.

$ sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/postgresql-key.gpg arch=amd64] http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

Actualiza el repositorio del sistema.

$ sudo apt update

Ahora, ya puedes instalar PostgreSQL.

$ sudo apt install postgresql postgresql-contrib

Comprueba el estado del servicio PostgreSQL.

$ sudo systemctl status postgresql
? postgresql.service - PostgreSQL RDBMS
     Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
     Active: active (exited) since Sat 2022-09-10 06:25:11 UTC; 13s ago
    Process: 12083 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
   Main PID: 12083 (code=exited, status=0/SUCCESS)
        CPU: 1ms

Sep 10 06:25:11 nodebb systemd[1]: Starting PostgreSQL RDBMS...
Sep 10 06:25:11 nodebb systemd[1]: Finished PostgreSQL RDBMS.

Paso 3 – Configurar PostgreSQL

Necesitamos establecer una contraseña para el usuario administrativo por defecto de Postgres postgres. En primer lugar, inicia sesión en el Shell de Postgres.

$ sudo -u postgres psql

Introduce el siguiente comando para cambiar la contraseña.

postgres=# \password postgres

Se te pedirá una nueva contraseña.

Enter new password for user "postgres":
Enter it again:

Crea un nuevo usuario para NodeBB.

postgres=# CREATE ROLE nbbuser WITH LOGIN ENCRYPTED PASSWORD 'YourNodeBBPassword';

Crea una nueva base de datos para NodeBB.

postgres=# CREATE DATABASE nodebbdb OWNER nbbuser;

Escribe \q para salir del shell.

postgres=# \q

Paso 4 – Instalar Node.js

Como el foro Nodebb está escrito utilizando el framework Node.js, necesitamos instalarlo para que funcione.

Ejecuta los siguientes comandos para instalar la versión LTS(v16.x) de Nodejs.

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

Verifica la instalación de Node.js y NPM.

$ node -v
v16.17.0
$ npm -v
8.15.0

Paso 5 – Instalar Git

Antes de proceder a instalar NodeBB, necesitamos instalar Git. Ejecuta el siguiente comando para instalar Git.

$ sudo apt install git

Ejecuta los siguientes comandos para realizar la configuración inicial de Git.

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

Paso 6 – Instalar NodeBB

No es aconsejable ejecutar NodeBB como usuario root. Crea un usuario de sistema sin privilegios y sin contraseña.

$ sudo adduser nodebb --disabled-password

Omite el resto de opciones.

Crea el directorio donde vivirá tu foro NodeBB.

$ sudo mkdir /var/www/html/nodebb -p

Cambia la propiedad de la carpeta al usuario recién creado.

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

Inicia sesión con el usuario recién creado.

$ sudo su - nodebb

Cambia al directorio de instalación de NodeBB.

$ cd /var/www/html/nodebb

Para instalar NodeBB, primero, necesitamos clonar su repositorio de GitHub.

Clona NodeBB en el directorio /var/www/nodebb. El punto al final del comando se refiere al directorio actual.

$ git clone -b v2.x https://github.com/NodeBB/NodeBB.git .

Aquí hemos clonado la rama v2.x de NodeBB que alberga la última versión estable de NodeBB. Puedes encontrar la última rama estable en la página de Últimas Ramas de NodeBB.

NodeBB incluye una utilidad de línea de comandos. Utiliza el siguiente comando para instalar NodeBB.

$ ./nodebb setup

Puedes pulsar intro para elegir el valor por defecto.

2022-09-10T10:10:27.957Z [2633] - info: NodeBB Setup Triggered via Command Line

Welcome to NodeBB v2.5.2!

This looks like a new installation, so you'll have to answer a few questions about your environment before we can proceed.
Press enter to accept the default setting (shown in brackets).
URL used to access this NodeBB (http://localhost:4567) https://forum.example.com
Please enter a NodeBB secret (44fd62bc-5047-4414-a4ca-83105740b624)
Would you like to submit anonymous plugin usage to nbbpm? (yes) no
Which database to use (mongo) postgres
2022-09-10T10:10:43.237Z [2633] - info:
Now configuring postgres database:
Host IP or address of your PostgreSQL instance (127.0.0.1)
Host port of your PostgreSQL instance (5432)
PostgreSQL username nbbuser
Password of your PostgreSQL database
PostgreSQL database name (nodebb) nodebbdb
Enable SSL for PostgreSQL database access (false)
........

Para el valor de la URL utilizada para acceder a este NodeBB, elige la URL final a la que quieres acceder al foro. Si vas a acceder al foro a través de la IP de tu servidor, introduce eso o introduce el dominio completo del foro. Aquí introduciremos https://forum.example.com. Elige no como respuesta a la pregunta sobre el envío del uso anónimo del plugin. Escribe postgres como tipo de base de datos.

A continuación, elige la IP del host y el puerto por defecto pulsando intro e introduce tu nombre de usuario PostgreSQL que es cuando introduces nbbuser y la contraseña que elegiste anteriormente para ese nombre de usuario al configurar MongoDB. Deberías elegir tu base de datos nodebbdb.

También se te pedirá que crees un usuario administrador y sus datos.

.....
2022-09-10T10:11:14.121Z [2633] - warn: No administrators have been detected, running initial user setup

Administrator username navjot
Administrator email address [email protected]
Password
Confirm Password
.....
....
2022-09-10T10:14:28.160Z [2633] - info: [build] Asset compilation successful. Completed in 118.777sec.

     =================================================================================================================================================================

NodeBB Setup Completed. Run "./nodebb start" to manually start your NodeBB server.

Una vez completada la configuración, ejecuta el siguiente comando para iniciar NodeBB.

$ ./nodebb start
Starting NodeBB
  "./nodebb stop" to stop the NodeBB server
  "./nodebb log" to view server output
  "./nodebb help" for more commands

Sal del usuario NodeBB.

$ exit

Paso 7 – Ejecutar NodeBB como un Servicio del Sistema

El servicio NodeBB no se ejecutará después de reiniciar el sistema. Para evitar iniciar NodeBB cada vez, tenemos que instalarlo como un Servicio del Sistema.

Detén primero el servicio NodeBB. Cambia al directorio de NodeBB y ejecuta directamente el comando utilizando el comando sudo -u.

$ cd /var/www/html/nodebb
$ sudo -u nodebb ./nodebb stop

Ejecuta el siguiente comando para crear y editar nodebb.service archivo de configuración de la unidad systemd.

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

Pega el siguiente código en el editor.

[Unit]
Description=NodeBB
Documentation=https://docs.nodebb.org
After=system.slice multi-user.target postgresql.service

[Service]
Type=simple
User=nodebb

StandardError=syslog
SyslogIdentifier=nodebb

Environment=NODE_ENV=production
WorkingDirectory=/var/www/html/nodebb
ExecStart=/usr/bin/env node loader.js --no-silent --no-daemon
Restart=always

[Install]
WantedBy=multi-user.target

Aquí hemos elegido el nombre de usuario nodebb que creamos en el Paso 6 y la ruta que hemos elegido para instalar NodeBB en él.

Habilita el servicio NodeBB.

$ sudo systemctl enable nodebb

Inicia el servicio NodeBB.

$ sudo systemctl start nodebb

Comprueba el estado del servicio.

$ sudo systemctl status nodebb
? nodebb.service - NodeBB
     Loaded: loaded (/etc/systemd/system/nodebb.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2022-09-11 21:41:07 UTC; 2s ago
       Docs: https://docs.nodebb.org
   Main PID: 26844 (node)
      Tasks: 18 (limit: 2237)
     Memory: 94.1M
        CPU: 2.114s
     CGroup: /system.slice/nodebb.service
             ??26844 node loader.js --no-silent --no-daemon
             ??26855 /usr/bin/node /var/www/html/nodebb/app.js

Sep 11 21:41:07 forum systemd[1]: Started NodeBB.
Sep 11 21:41:07 forum nodebb[26844]: NodeBB v2.5.2 Copyright (C) 2013-2022 NodeBB Inc.
Sep 11 21:41:07 forum nodebb[26844]: This program comes with ABSOLUTELY NO WARRANTY.
Sep 11 21:41:07 forum nodebb[26844]: This is free software, and you are welcome to redistribute it under certain conditions.
Sep 11 21:41:07 forum nodebb[26844]: For the full license, please visit: http://www.gnu.org/copyleft/gpl.html
Sep 11 21:41:07 forum nodebb[26844]: Clustering enabled: Spinning up 1 process(es).
Sep 11 21:41:08 forum nodebb[26855]: 2022-09-11T21:41:08.002Z [4567/26855] - info: Initializing NodeBB v2.5.2 https://forum.example.com

Paso 8 – Instalar Nginx

Ubuntu 22.04 viene con una versión antigua de Nginx. Para instalar la última versión, necesitas descargar el repositorio oficial de Nginx.

Importa la clave de firma de Nginx.

$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

Añade el repositorio de la versión estable de Nginx.

$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list

Actualiza los repositorios del sistema.

$ sudo apt update

Instala Nginx.

$ sudo apt install nginx

Verifica la instalación.

$ nginx -v
nginx version: nginx/1.22.0

Iniciar el servidor Nginx.

$ sudo systemctl start nginx

Paso 9 – Instalar SSL

Necesitamos instalar Certbot para generar el certificado SSL. Puedes instalar Certbot utilizando el repositorio de Ubuntu o descargar la última versión utilizando la herramienta Snapd. Nosotros utilizaremos la versión Snapd.

Ubuntu 22.04 viene con Snapd instalado por defecto. Ejecuta los siguientes comandos para asegurarte de que tu versión de Snapd está actualizada.

$ sudo snap install core
$ sudo snap refresh core

Instala Certbot.

$ sudo snap install --classic certbot

Utiliza el siguiente comando para asegurarte de que se puede ejecutar el comando Certbot creando un enlace simbólico al directorio /usr/bin.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Ejecuta el siguiente comando para generar un certificado SSL.

$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d forum.example.com

El comando anterior descargará un certificado en el directorio /etc/letsencrypt/live/forum.example.com de tu servidor.

Genera un certificado de grupo Diffie-Hellman.

$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

Para comprobar si la renovación SSL funciona correctamente, realiza una ejecución en seco del proceso.

$ sudo certbot renew --dry-run

Si no ves ningún error, ya está todo listo. Tu certificado se renovará automáticamente.

Paso 10 – Configurar Nginx

Abre el archivo /etc/nginx/nginx.conf para editarlo.

$ sudo nano /etc/nginx/nginx.conf

Añade la siguiente línea antes de la línea include /etc/nginx/conf.d/*.conf;.

server_names_hash_bucket_size  64;

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.

Crea y abre el archivo /etc/nginx/conf.d/nodebb.conf para editarlo.

$ sudo nano /etc/nginx/conf.d/nodebb.conf

Pega en él el siguiente código. Sustituye forum.example.com por el nombre de tu dominio. Asegúrate de que el valor de client_max_body_size se establece en 25MB para fijar el tamaño de carga del foro.

server {
  listen 80 default_server;
  server_name forum.example.com;
  return 301 https://$server_name$request_uri;
}

server {
   listen 443 ssl http2;
   server_name forum.example.com;

   http2_push_preload on; # Enable HTTP/2 Server Push

   ssl_certificate /etc/letsencrypt/live/forum.example.com/fullchain.pem;
   ssl_certificate_key /etc/letsencrypt/live/forum.example.com/privkey.pem;
   ssl_trusted_certificate /etc/letsencrypt/live/forum.example.com/chain.pem;
   ssl_session_timeout 1d;

   # Enable TLS versions (TLSv1.3 is required upcoming HTTP/3 QUIC).
   ssl_protocols TLSv1.2 TLSv1.3;

   # Enable TLSv1.3's 0-RTT. Use $ssl_early_data when reverse proxying to
   # prevent replay attacks.
   #
   # @see: https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_early_data
   ssl_early_data on;

   ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384';
   ssl_prefer_server_ciphers on;
   ssl_session_cache shared:SSL:50m;

   # OCSP Stapling ---
   # fetch OCSP records from URL in ssl_certificate and cache them
   ssl_stapling on;
   ssl_stapling_verify on;
   ssl_dhparam /etc/ssl/certs/dhparam.pem;
   client_max_body_size 25M;

   gzip            on;
   gzip_min_length 1000;
   gzip_proxied    off;
   gzip_types      text/plain application/xml text/javascript application/javascript application/x-javascript text/css application/json;

   add_header X-Early-Data $tls1_3_early_data;

   location / {       
       # Socket.IO Support
       proxy_set_header Connection "upgrade";
       proxy_set_header Upgrade $http_upgrade;
       proxy_http_version 1.1;

       proxy_set_header Host $http_host;
       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 X-NginX-Proxy true;
       proxy_set_header X-Frame-Options SAMEORIGIN;

       proxy_pass http://127.0.0.1:4567;  # no trailing slash
       proxy_redirect off;
   }

   location @nodebb {
       proxy_pass http://127.0.0.1:4567;
   }

   location ~ ^/assets/(.*) {
       root /var/www/html/nodebb/;
       try_files /build/public/$1 /public/$1 @nodebb;
   }
}

# This block is useful for debugging TLS v1.3. Please feel free to remove this
# and use the `$ssl_early_data` variable exposed by NGINX directly should you
# wish to do so.
map $ssl_early_data $tls1_3_early_data {
  "~." $ssl_early_data;
  default "";
}

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.

Verifica la configuración de Nginx.

$ sudo nginx -t

Reinicia el servidor Nginx.

$ sudo systemctl restart nginx

Paso 11 – Acceder y configurar el foro

Puedes acceder al foro visitando la URL https://forum.example.com en tu navegador. Aparecerá la siguiente página.

Página de inicio del Foro NodeBB

Haz clic en la página de acceso e introduce las credenciales de administrador que creaste en el paso 6.

Página de inicio de sesión de NodeBB

Iniciarás sesión. A continuación, haz clic en el icono situado más a la derecha en la parte superior de la barra de menús para acceder al panel de administración.

Enlace al Panel de Administración del Foro NodeBB

A partir de aquí, podrás gestionar el foro. Amplíalo instalando temas y plugins.

Panel de control del administrador del foro NodeBB

Después de instalar cualquier tema y plugin, debes reconstruir y reiniciar el foro utilizando el botón de la esquina superior derecha del panel de administración, como se muestra aquí.

Botón Reconstruir y Reiniciar Foro NodeBB

Asegúrate de configurar tu servicio de correo electrónico yendo a Panel de control >> Configuración >> Correo electrónico para que los usuarios de tu foro puedan recibir correos electrónicos. Selecciona los siguientes ajustes para garantizar una configuración óptima del envío de correos electrónicos.

Configuración del correo electrónico del foro NodeBB

Desplázate hacia abajo en la página y selecciona un servicio de correo personalizado en el desplegable o utiliza Correo personalizado si tu servicio SMTP no está en la lista. Para nuestro tutorial, utilizaremos el servicio SES.

Configuración SMTP del Foro NodeBB

Haz clic en el icono de guardar en la parte inferior derecha para guardar la configuración.

Desplázate hasta la parte inferior de la página para enviar un correo de prueba. Por defecto, enviará una plantilla de correo prohibida. Puedes seleccionar cualquier otra plantilla de correo para probar. Enviaremos el correo de bienvenida.

Pruebas de correo electrónico del foro NodeBB

Recibirás un correo de prueba como el que se muestra a continuación confirmando la configuración.

Email de prueba del foro NodeBB

Conclusión

Esto concluye nuestro tutorial sobre la instalación del foro NodeBB utilizando la base de datos PostgreSQL y Nginx en un servidor Ubuntu 22.04. Si tienes alguna pregunta, publícala en los comentarios a continuación.

Scroll al inicio