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.
Haz clic en la página de acceso e introduce las credenciales de administrador que creaste en el paso 6.
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.
A partir de aquí, podrás gestionar el foro. Amplíalo instalando temas y plugins.
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í.
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.
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.
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.
Recibirás un correo de prueba como el que se muestra a continuación confirmando la configuración.
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.