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.