Cómo instalar el editor web colaborativo Etherpad en Rocky Linux 8
Etherpad es un editor online de código abierto que proporciona edición colaborativa en tiempo real en el navegador. Está escrito en Node.js y puede autoalojarse para trabajar con varias plataformas como WordPress, Drupal, Odoo, Discourse, Joomla, etc.
En este tutorial, instalaremos Etherpad en un servidor Rocky Linux 8, utilizando la base de datos MariaDB para almacenar nuestros datos. También utilizaremos Nginx como proxy inverso para la aplicación e instalaremos un certificado SSL utilizando Let’s Encrypt para permitir las conexiones HTTPS a nuestra instancia de Etherpad.
Requisitos previos
-
Un sistema que ejecute Rocky Linux 8.
-
Un usuario no root con privilegios sudo.
-
Un nombre de dominio que apunte al servidor.
-
Nodejs instalado. Sigue nuestra guía para instalar N odejs en el servidor Rocky Linux 8. Utiliza cualquiera de los dos métodos indicados.
-
Asegúrate de que todo está actualizado.
$ sudo dnf update
Paso 1 – Configurar el Firewall
Rocky Linux utiliza el cortafuegos Firewalld. Comprueba el estado del cortafuegos.
$ sudo firewall-cmd --state running
Esto indica que está funcionando correctamente.
El cortafuegos funciona con diferentes zonas y la zona pública es la que viene por defecto, que es la que utilizaremos. Enumera todos los servicios y puertos activos en el cortafuegos.
$ sudo firewall-cmd --permanent --list-services
Debería mostrar la siguiente salida.
cockpit dhcpv6-client ssh
Permite los puertos HTTP y HTTPS.
$ sudo firewall-cmd --permanent --add-service=http $ sudo firewall-cmd --permanent --add-service=https
Abre el puerto 9001
utilizado por la aplicación Etherpad.
$ sudo firewall-cmd --permanent --add-port=9001/tcp
Vuelve a comprobar el estado del cortafuegos.
$ sudo firewall-cmd --permanent --list-services
Deberías ver una salida similar.
cockpit dhcpv6-client http https ssh
Vuelve a cargar el cortafuegos para activar los cambios.
$ sudo firewall-cmd --reload
Paso 2 – Instalar Git
Antes de instalar Etherpad, necesitamos instalar Git. Ejecuta el siguiente comando para instalar Git.
$ sudo dnf install git
Verifica la instalación.
$ git --version git version 2.27.0
Añade la configuración inicial.
$ git config --global user.name "YourName" $ git config --global user.email "[email protected]"
Lista la configuración que acabas de establecer.
$ git config --list user.name=YourName [email protected]
Paso 3 – Instalar MariaDB
Como vamos a utilizar la base de datos MariaDB para almacenar los datos de Etherpad, primero tenemos que instalarla y configurarla.
El repositorio AppStream de Rocky Linux viene con MariaDB. Para listar todas las versiones disponibles de MariaDB instaladas, ejecuta el siguiente comando.
$ sudo dnf module list mariadb Last metadata expiration check: 1:15:26 ago on Thu 21 Oct 2021 10:20:01 AM UTC. Rocky Linux 8 - AppStream Name Stream Profiles Summary mariadb 10.3 [d] client, galera, server [d] MariaDB Module mariadb 10.5 client, galera, server [d] MariaDB Module Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
La versión por defecto es la 10.3. Sin embargo, puedes instalar la última versión con el siguiente comando.
$ sudo dnf module enable mariadb:10.5
Instala MariaDB.
$ sudo dnf install mariadb-server
Habilita e inicia el servicio MariaDB.
$ sudo systemctl enable mariadb --now
Comprueba el estado del servicio.
$ sudo systemctl status mariadb
Asegura el servidor MariaDB.
$ sudo mysql_secure_installation
Te encontrarás con varias indicaciones. Responde a ellas como se indica a continuación.
Enter current password for root (enter for none): Press Enter Switch to unix_socket authentication [Y/n] Type y Change the root password? [Y/n] Type n Remove anonymous users? [Y/n] Type y Disallow root login remotely? [Y/n] Type y Remove test database and access to it? [Y/n] Type y Reload privilege tables now? [Y/n] Type y
Ahora puedes conectarte al servidor MariaDB con el siguiente comando.
$ sudo mysql
Paso 4 – Configurar MariaDB
Accede al shell de MariaDB.
$ sudo mysql
Crea una nueva base de datos para Etherpad.
$ create database `etherpad_lite_db`;
Crea un nuevo usuario de base de datos.
$ CREATE USER 'etherpaduser'@'localhost' identified by 'password';
Utiliza una contraseña fuerte.
Concede permisos en la base de datos al usuario.
$ grant CREATE,ALTER,SELECT,INSERT,UPDATE,DELETE on `etherpad_lite_db`.* to '<etherpaduser>'@'localhost';
Sal del intérprete de comandos de MySQL.
$ exit
Paso 5 – Descargar e instalar Etherpad
Para instalar Etherpad, descargaremos su código fuente y lo construiremos.
El primer paso es crear un nuevo usuario etherpad
utilizando el siguiente comando.
$ sudo adduser --system --home /opt/etherpad --create-home --user-group etherpad
Este comando crea un usuario --system
, lo que significa que no puede iniciar sesión y no tiene contraseña. También le damos un directorio raíz /opt/etherpad
que es donde descargaremos Etherpad. La bandera --create-home
crea el directorio raíz con los permisos correctos. La bandera --user-group
crea un grupo con el mismo nombre que el nombre de usuario.
Cambia al usuario etherpad
para descargar e instalar la aplicación.
$ sudo -u etherpad bash
Cambia al directorio /opt/etherpad
.
[etherpad@etherpad user] cd /opt/etherpad
Clona el repositorio de Etherpad en el directorio /opt/etherpad
.
[etherpad@etherpad ~]$ git clone --branch master git://github.com/ether/etherpad-lite.git
Cambia al directorio recién descargado.
[etherpad@etherpad ~]$ cd etherpad-lite
Ejecuta el script run.sh
de Etherpad para configurar e instalar las dependencias.
[etherpad@etherpad etherpad-lite]$ src/bin/run.sh
Puedes lanzar la URL http://YOURSERVERIP:9001
en el navegador para lanzar Etherpad. Obtendrás la siguiente pantalla.
Hay un problema con la instalación anterior. Requiere que mantengas el shell actual abierto con Node ejecutándose en primer plano. Para que sea una instalación persistente, tenemos que ejecutar Etherpad como un servicio. Pulsa Ctrl + C en tu terminal para detener la ejecución de Etherpad.
Paso 6 – Configurar Etherpad
Antes de seguir adelante, tenemos que establecer algunos ajustes y configurar nuestra instalación según nuestras necesidades. Etherpad almacena sus ajustes en el archivo settings.json
en el directorio de instalación.
Abre el archivo para editarlo.
[etherpad@etherpad etherpad-lite]$ nano settings.json
El archivo de configuración está formateado como JSON. Lo primero que debes configurar es la configuración de la base de datos.
Busca el siguiente código y coméntalo poniendo //
delante.
// "dbType": "dirty", // "dbSettings": { // "filename": "var/dirty.db" // },
A continuación, busca el siguiente código y cambia sus valores de la siguiente manera. Asegúrate de eliminar /*
y */
al principio y al final.
"dbType" : "mysql", "dbSettings" : { "user": "etherpaduser", "host": "localhost", "port": 3306, "password": "password", "database": "etherpad_lite_db", "charset": "utf8mb4" },
Por último, desplázate un poco hacia abajo para encontrar el ajuste trustProxy
y cambia su valor de false
a true
.
"trustProxy": true,
Este ajuste es necesario para que Etherpad funcione junto con Nginx.
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando te lo pida una vez hayas terminado.
Sal del shell de usuario de Etherpad.
[etherpad@etherpad etherpad-lite]$ exit
Paso 7 – Crear el servicio Etherpad
Para iniciar Etherpad en el arranque y gestionar el proceso mediante systemctl
, necesitamos crear un archivo de servicio.
Crea y abre el archivo de servicio.
$ sudo nano /etc/systemd/system/etherpad.service
Pega el siguiente código en él.
[Unit] Description=Etherpad, a collaborative web editor. After=syslog.target network.target [Service] Type=simple User=etherpad Group=etherpad WorkingDirectory=/opt/etherpad Environment=NODE_ENV=production ExecStart=/usr/bin/node --experimental-worker /opt/etherpad/etherpad-lite/node_modules/ep_etherpad-lite/node/server.js Restart=always [Install] WantedBy=multi-user.target
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando te lo pida una vez terminado.
Vuelve a cargar el demonio de servicio para introducir la nueva configuración.
$ sudo systemctl daemon-reload
Activa el inicio del servicio Etherpad.
$ sudo systemctl enable etherpad --now
Comprueba el estado del servicio.
$ sudo systemctl status etherpad ? etherpad.service - Etherpad, a collaborative web editor. Loaded: loaded (/etc/systemd/system/etherpad.service; disabled; vendor preset: disabled) Active: active (running) since Thu 2021-10-21 15:06:53 UTC; 6s ago Main PID: 47228 (node) Tasks: 13 (limit: 11411) Memory: 102.8M CGroup: /system.slice/etherpad.service ??47228 /usr/bin/node --experimental-worker /opt/etherpad/etherpad-lite/node_modules/ep_etherpad-lite/node/server.js .......
Paso 8 – Instalar SSL con Let’s Encrypt
Para instalar un certificado SSL usando Let’s Encrypt, necesitamos instalar la herramienta Certbot.
En primer lugar, tienes que descargar e instalar el repositorio EPEL.
$ sudo dnf install epel-release
Ejecuta los siguientes comandos para instalar Certbot.
$ sudo dnf install certbot
Generar el certificado SSL.
$ sudo certbot certonly --standalone --agree-tos --preferred-challenges http -m [email protected] -d example.com
El comando anterior descargará un certificado en el directorio /etc/letsencrypt/live/etherpad.example.com
de tu servidor.
Genera un certificado de grupo Diffie-Hellman.
$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Crea un directorio webroot de desafío para la renovación automática de Let’s Encrypt.
$ sudo mkdir -p /var/lib/letsencrypt
Crea un Cron Job para renovar el SSL. Se ejecutará cada día para comprobar el certificado y renovarlo si es necesario. Para ello, primero crea el archivo /etc/cron.daily/certbot-renew
y ábrelo para editarlo.
$ sudo nano /etc/cron.daily/certbot-renew
Pega el siguiente código.
#!/bin/sh certbot renew --cert-name etherpad.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando te lo pida.
Cambia los permisos del archivo de la tarea para que sea ejecutable.
$ sudo chmod +x /etc/cron.daily/certbot-renew
Paso 9 – Instalar y configurar Nginx
Rocky Linux viene con una versión antigua de Nginx. Para instalar la última versión, tienes que añadir el repositorio de Nginx.
Crea y abre el archivo /etc/yum.repos.d/nginx.repo
para editarlo.
$ sudo nano /etc/yum.repos.d/nginx.repo
Pega en él el siguiente código.
[nginx-stable] name=nginx stable repo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true [nginx-mainline] name=nginx mainline repo baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/ gpgcheck=1 enabled=0 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando te lo pida una vez terminado.
Instala Nginx.
$ sudo dnf install nginx
Activa el servicio Nginx.
$ sudo systemctl enable nginx
A continuación, crea y abre el archivo /etc/nginx/conf.d/etherpad.conf
para editarlo.
$ sudo nano /etc/nginx/conf.d/etherpad.conf
Pega en él el siguiente código.
server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name etherpad.example.com; access_log /var/log/nginx/etherpad.access.log; error_log /var/log/nginx/etherpad.error.log; ssl_certificate /etc/letsencrypt/live/etherpad.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/etherpad.example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/etherpad.example.com/chain.pem; ssl_session_timeout 5m; ssl_session_cache shared:MozSSL:10m; # about 40000 sessions ssl_session_tickets off; ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1; ssl_stapling on; ssl_stapling_verify on; ssl_dhparam /etc/ssl/certs/dhparam.pem; location / { rewrite ^/$ / break; rewrite ^/locales/(.*) /locales/$1 break; rewrite ^/locales.json /locales.json break; rewrite ^/admin(.*) /admin/$1 break; rewrite ^/p/(.*) /p/$1 break; rewrite ^/static/(.*) /static/$1 break; rewrite ^/pluginfw/(.*) /pluginfw/$1 break; rewrite ^/javascripts/(.*) /javascripts/$1 break; rewrite ^/socket.io/(.*) /socket.io/$1 break; rewrite ^/ep/(.*) /ep/$1 break; rewrite ^/minified/(.*) /minified/$1 break; rewrite ^/api/(.*) /api/$1 break; rewrite ^/ro/(.*) /ro/$1 break; rewrite ^/error/(.*) /error/$1 break; rewrite ^/jserror(.*) /jserror$1 break; rewrite ^/redirect(.*) /redirect$1 break; rewrite /favicon.ico /favicon.ico break; rewrite /robots.txt /robots.txt break; rewrite /(.*) /p/$1; proxy_pass http://127.0.0.1:9001; proxy_buffering off; proxy_set_header Host $host; proxy_pass_header Server; # proxy headers proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_http_version 1.1; # websocket proxying proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; } } # we're in the http context here map $http_upgrade $connection_upgrade { default upgrade; '' close; } # enforce HTTPS server { listen 80; listen [::]:80; server_name etherpad.example.com; return 301 https://$host$request_uri; }
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando te lo pida una vez que hayas terminado.
Comprueba la sintaxis del archivo de configuración de Nginx.
$ sudo nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Si obtienes el siguiente error, tendrás que editar el archivo /etc/nginx/nginx.conf
para añadir/ajustar el tamaño de la variable server_names_hash_bucket_size
.
nginx: [emerg] could not build the server_names_hash, you should increase server_names_hash_bucket_size
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 pida. Vuelve a validar Nginx.
Por último, inicia el servicio Nginx para habilitar la nueva configuración.
$ sudo systemctl start nginx
Inicia la URL https://etherpad.example.com
en tu navegador y se abrirá la página de inicio de Etherpad. Ahora puedes utilizarla para editar documentos e invitar a colaboradores.
Actualizar Etherpad
Actualizar Etherpad es fácil. El primer paso es cambiar al shell de usuario de Etherpad.
$ sudo -u etherpad bash
Cambia al directorio /opt/etherpad/etherpad-lite
.
[etherpad@etherpad user] cd /opt/etherpad/etherpad-lite
Saca el último repositorio de Etherpad en el directorio /opt/etherpad/etherpad-lite
.
[etherpad@etherpad ~]$ git pull origin
Ejecuta el script run.sh
de Etherpad para configurar la última versión de Etherpad.
[etherpad@etherpad etherpad-lite]$ src/bin/run.sh
Conclusión
En este tutorial, hemos configurado el Editor Colaborativo Etherpad con el servidor Nginx y lo hemos asegurado con los certificados SSL de Let's Encrypt. Tu instalación de Etherpad está lista para ser utilizada y puedes ampliarla con más funciones, como usuarios autentificados, plugins y personalizaciones de la interfaz de usuario.
Si tienes alguna pregunta, publícala en los comentarios de abajo.