Cómo instalar el foro NodeBB con Nginx y Let’s Encrypt SSL en Ubuntu 20.04 LTS

NodeBB es un moderno software de foros impulsado por Node.js que utiliza MongoDB/Redis como plataforma de base de datos. Utiliza web sockets para interacciones instantáneas y notificaciones en tiempo real.

En este tutorial, aprenderemos a instalar el foro NodeBB en un servidor basado en Ubuntu 20.04.

Requisitos previos

  • Un servidor basado en Ubuntu 20.04 con un usuario no root con privilegios sudo.

  • Un mínimo de 2GB de RAM. Si tu servidor sólo tiene 1GB de RAM, lo mejor es habilitar una partición de intercambio.

  • Asegúrate de que todo está actualizado.

    $ sudo apt update && sudo apt upgrade
    
  • Pocos paquetes esenciales. Algunos de ellos ya estarán en tu servidor.

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

Paso 1 - Configurar el cortafuegos

El primer paso es configurar el cortafuegos. Ubuntu viene con ufw (Uncomplicated Firewall) por defecto.

Comprueba si el cortafuegos se está ejecutando.

$ sudo ufw status

Deberías obtener la siguiente salida.

Status: inactive

Permite el puerto SSH para que el cortafuegos no rompa la conexión actual al habilitarlo.

$ sudo ufw allow OpenSSH

Permite el puerto 27017 para el servidor MongoDB y el puerto 4567 para ejecutar el foro NodeBB. Permite también los puertos HTTP y HTTPS.

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

Habilita el cortafuegos.

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

Vuelve a comprobar el estado del cortafuegos.

$ sudo ufw status

Deberías ver una salida similar.

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)

Paso 2 - Instalar Node.js

Aquí instalaremos la versión LTS de Node.js. Ejecuta los siguientes comandos para instalar Node.js.

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

Comprueba si Node está correctamente instalado.

$ node --version

Deberías ver una salida similar.

v12.18.3

Comprueba también npm.

$ npm --version
6.14.6

Paso 3 - Instalar MongoDB

MongoDB es la base de datos por defecto para NodeBB. También puedes utilizar Redis en lugar de MongoDB. Cubriremos ambas bases de datos en nuestro tutorial.

El repositorio de MongoDB para Ubuntu 20.04 aún no está listo y el propio Ubuntu tiene una versión muy antigua. Para nuestro propósito, utilizaremos el repositorio de MongoDB para 18.04 que funciona perfectamente. Puedes actualizar la lista de paquetes con el último repositorio una vez que esté disponible el soporte oficial.

Importa la clave pública de MongoDB.

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

Añade el repositorio de MongoDB.

$ 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

Actualiza la base de datos de paquetes local.

$ sudo apt update

Instala MongoDB.

$ sudo apt install mongodb-org

Verifica la instalación de MongoDB.

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

Iniciar el servicio MongoDB.

$ sudo systemctl start mongod

Habilitar el servicio MongoDB.

$ sudo systemctl enable mongod

Comprobar el estado del servicio MongoDB.

$ sudo systemctl status mongod

Paso 4 - Configurar MongoDB

La administración de Mongo se realiza a través del shell de MongoDB. La instalación por defecto de MongoDB escucha en el puerto 27017.

Accede al shell de MongoDB.

$ mongo

Cambia a la base de datos integrada admin.

> use admin

Crea un usuario administrativo. Este no es el mismo que el usuario administrador de NodeBB.

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

Cambia el marcador de posición “yourpassword” por tu propia contraseña.

Añade una nueva base de datos para NodeBB.

> use nodebb

A continuación, crea el usuario nodebb para gestionar la base de datos nodebb.

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

El permiso readwrite permite a NodeBB almacenar y recuperar datos de la base de datos nodebb. El permiso clustermonitor permite a NodeBB el acceso de sólo lectura a las estadísticas de la base de datos que son visibles a través de su panel de administración.

Sal del shell de Mongo.

> quit()

Abre el archivo de configuración de MongoDB para editarlo.

$ sudo nano /etc/mongod.conf

Añade la siguiente línea al final del archivo.

security:
  authorization: enabled

Reinicia MongoDB y verifica el usuario administrativo creado anteriormente.

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

Deberías ver el prompt de Mongo si todo se ha configurado correctamente.

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 sin privilegios.

$ sudo adduser nodebb

Establece una contraseña de tu elección y omite otras opciones.

Crea el directorio donde vivirá tu foro NodeBB.

$ sudo mkdir /var/www/nodebb

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

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

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

$ su nodebb

Cambia al directorio de instalación de NodeBB.

$ cd /var/www/nodebb

Para instalar NodeBB, primero tenemos que 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 v1.14.2 https://github.com/NodeBB/NodeBB.git .

Aquí hemos clonado la v1.14.2 de NodeBB que era la última versión estable en el momento de escribir el tutorial. Puedes encontrar la última rama estable en la página de la última versión de NodeBB.

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

$ ./nodebb setup

Puedes pulsar enter para elegir el valor por defecto.

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 http://forum.example.com.

Sigue eligiendo los valores por defecto hasta que se te pida el nombre de usuario de Mon goDB, que es cuando introduces nodebb y la contraseña que elegiste antes para ese nombre de usuario al configurar MongoDB. Deberías elegir tu base de datos nodebb. También se te pedirá que crees un usuario administrador y sus datos.

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

$ ./nodebb start

Tu foro ya está en marcha. Deberías poder acceder a él a través de http://<yourserverip>:4567.

Puede que veas un mensaje de error que dice Parece que tu conexión con NodeBB se ha perdido, por favor espera mientras intentamos reconectar. Aparece porque hemos elegido la URL por defecto de NodeBB http://forum.example.com y no http://<yourserverip. Pero si introduces la dirección IP durante la configuración, ya no te aparecerá el error, pero tendrás que volver a configurarlo más tarde, después de elegir un dominio para tu foro.

Sal del usuario de NodeBB.

$ exit

Paso 7 - Instalar Nginx

Ubuntu 20.04 lleva por defecto la última versión estable de Nginx. Vamos a instalarlo.

$ sudo apt install nginx

Comprueba si está instalado correctamente.

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

Inicia y activa Nginx.

$ sudo systemctl start nginx
$ sudo systemctl enable nginx

Abre la dirección IP de tu servidor en tu navegador web. Deberías ver la siguiente página, lo que significa que tu servidor está en funcionamiento.

Paso 8 - Configurar Nginx

Ejecuta el siguiente comando para añadir un archivo de configuración para tu sitio.

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

Pega el siguiente código en el 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";
    }
}

Pulsa Ctrl + X para salir del editor e introduce Y cuando se te pida.

Cuando hayas terminado, comprueba que la configuración de Nginx es correcta.

$ sudo nginx -t

Vuelve a cargar el servicio Nginx para activar la configuración.

$ sudo systemctl reload nginx

Visita http://forum.example.com en tu navegador para abrir el foro de NodeBB.

Paso 9 - Ejecutar NodeBB como un servicio del sistema

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

Detén el servicio NodeBB primero.

$ ./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 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

Aquí hemos elegido como nombre de usuario nodebb que hemos creado 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

Paso 10 - Obtener un certificado Let's Encrypt SSL

Asegurar tu foro NodeBB con HTTPS es un paso necesario para asegurar el tráfico de tu sitio. Para este tutorial, utilizaremos el cliente Certbot para instalar el SSL.

Para ello, primero instala la herramienta Certbot.

$ sudo apt install certbot python3-certbot-nginx

Genera los certificados.

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

Si es la primera vez que ejecutas Certbot en tu sistema, se te pedirá una dirección de correo electrónico y que aceptes las condiciones del servicio. También se te preguntará si aceptas compartir datos con la fundación EFF, a lo que puedes decir que no. Después de hacerlo, Certbot se comunicará con los servidores de Let's Encrypt y ejecutará un reto para verificar tus dominios.

Si se realiza con éxito, se te preguntará cómo manejar las redirecciones HTTPS.

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):

Selecciona la opción Secure y pulsa Intro. Esto asegurará que todas las peticiones al dominio http sean redirigidas correctamente a la versión https. A continuación se crearán tus certificados y se actualizarán tus archivos de configuración de Nginx con la configuración SSL.

Tus certificados están listos y ya puedes abrir tu sitio web yendo a https://forum.example.com

Paso 11 - Verificar la renovación automática de SSL

Este es el último paso antes de terminar este tutorial.

Comprueba el proceso de renovación haciendo un simulacro del proceso de renovación.

$ sudo certbot renew --dry-run

Si no obtienes errores, significa que estás listo. Certbot renovará automáticamente tus certificados por ti. Se te enviará un correo electrónico avisándote de la caducidad del certificado.

Conclusión

Eso es todo en este tutorial. Tu configuración del foro NodeBB está completa. Si tienes alguna pregunta, publícala en los comentarios de abajo.

También te podría gustar...