Cómo instalar el editor web colaborativo Etherpad en Rocky Linux 8

Inicio

Etherpad es un editor en línea de código abierto que proporciona edición colaborativa en tiempo real en el navegador. Está escrito en Node.js y puede ser autohospedado 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 usaremos Nginx como proxy inverso para la aplicaci√≥n e instalaremos un certificado SSL usando Let’s Encrypt para habilitar las conexiones HTTPS a nuestra instancia de Etherpad.

requisitos previos

  1. Un sistema que ejecuta Rocky Linux 8.
  2. Un usuario no root con privilegios sudo.
  3. Un nombre de dominio apuntaba al servidor.
  4. Nodejs instalado. Siga nuestra guía sobre cómo instalar Nodejs en el servidor Rocky Linux 8. Utilice cualquiera de los dos métodos especificados.
  5. Aseg√ļrate de que todo est√© actualizado.
    $ sudo dnf update
    

Paso 1: configurar el cortafuegos

Rocky Linux usa Firewalld Firewall. Compruebe 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 predeterminada, que usaremos. Enumere todos los servicios y puertos activos en el firewall.

$ sudo firewall-cmd --permanent --list-services

Debería mostrar el siguiente resultado.

cockpit dhcpv6-client ssh

Permitir puertos HTTP y HTTPS.

$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https

Abra el puerto 9001 utilizado por la aplicación Etherpad.

$ sudo firewall-cmd --permanent --add-port=9001/tcp

Vuelva a comprobar el estado del cortafuegos.

$ sudo firewall-cmd --permanent --list-services

Deberías ver una salida similar.

cockpit dhcpv6-client http https ssh

Vuelva a cargar el firewall para habilitar los cambios.

$ sudo firewall-cmd --reload

Paso 2 – Instalar Git

Antes de instalar Etherpad, necesitamos instalar Git. Ejecute el siguiente comando para instalar Git.

$ sudo dnf install git

Verifique la instalación.

$ git --version
git version 2.27.0

A√Īadir configuraci√≥n inicial.

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

Enumere la configuración que acaba de establecer.

$ git config --list
user.name=YourName
[email protected]

Paso 3 – Instalar MariaDB

Dado que usaremos la base de datos MariaDB para almacenar los datos de Etherpad, primero debemos instalarlo y configurarlo.

El repositorio Rocky Linux AppStream viene con MariaDB. Para enumerar todas las versiones disponibles de MariaDB instaladas, ejecute 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 predeterminada se establece en 10.3. Sin embargo, puede instalar la √ļltima versi√≥n con el siguiente comando.

$ sudo dnf module enable mariadb:10.5

Instala MariaDB.

$ sudo dnf install mariadb-server

Habilite e inicie el servicio MariaDB. Publicidad

$ sudo systemctl enable mariadb --now

Consultar el estado del servicio.

$ sudo systemctl status mariadb

Asegure el servidor MariaDB.

$ sudo mysql_secure_installation

Se enfrentará a varias indicaciones. Respóndelas de la siguiente manera.

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 puede conectarse al servidor MariaDB usando el siguiente comando.

$ sudo mysql 

Paso 4 – Configurar MariaDB

Inicie sesión en el shell de MariaDB.

$ sudo mysql

Cree una nueva base de datos para Etherpad.

$ create database `etherpad_lite_db`;

Cree un nuevo usuario de la base de datos.

$ CREATE USER 'etherpaduser'@'localhost' identified by 'password';

Utilice una contrase√Īa segura.

Otorgar permisos sobre la base de datos al usuario.

$ grant CREATE,ALTER,SELECT,INSERT,UPDATE,DELETE on `etherpad_lite_db`.* to '<etherpaduser>'@'localhost';

Salga del shell de MySQL.

$ exit

Paso 5: descargue e instale Etherpad

Para instalar Etherpad, descargaremos su código fuente y lo construiremos.

El primer paso es crear un nuevo usuario de etherpad usando 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 asignamos un directorio de inicio /opt/etherpad, que es donde descargaremos Etherpad. El indicador –create-home crea el directorio de inicio con los permisos correctos. La marca –user-group crea un grupo con el mismo nombre que el nombre de usuario.

Cambie al usuario de etherpad para descargar e instalar la aplicación.

$ sudo -u etherpad bash

Cambie al directorio /opt/etherpad.

[[email protected] user] cd /opt/etherpad

Clone el repositorio de Etherpad en el directorio /opt/etherpad.

[[email protected] ~]$ git clone --branch master git://github.com/ether/etherpad-lite.git

Cambie al directorio recién descargado.

[[email protected] ~]$ cd etherpad-lite

Ejecute el script run.sh de Etherpad para configurar e instalar las dependencias.

[[email protected] etherpad-lite]$ src/bin/run.sh

Puede iniciar la URL http://YOURSERVERIP:9001 en el navegador para iniciar Etherpad. Obtendr√° la siguiente pantalla.

Inicio

Hay un problema con la instalación anterior. Requiere que mantenga abierto el shell actual con Node ejecutándose en primer plano. Para que sea una instalación persistente, necesitamos ejecutar Etherpad como un servicio. Presione Ctrl + C en su terminal para detener la ejecución de Etherpad.

Paso 6 – Configurar Etherpad

Antes de continuar, debemos establecer algunos ajustes y configurar nuestra instalación de acuerdo con nuestras necesidades. Etherpad almacena su configuración en el archivo settings.json en el directorio de instalación.

Abra el archivo para editarlo.

[[email protected] etherpad-lite]$ nano settings.json

El archivo de configuración tiene el formato JSON. Lo primero que debe configurar es la configuración de la base de datos.

Encuentre el siguiente código y coméntelo poniendo // delante de él.

//  "dbType": "dirty",
//  "dbSettings": {
//    "filename": "var/dirty.db"
//  },

Luego, encuentre el siguiente c√≥digo y cambie sus valores de la siguiente manera. Aseg√ļrese 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"
  },

Finalmente, desplácese un poco hacia abajo para encontrar la configuración de trustProxy y cambie su valor de falso a verdadero.

  "trustProxy": true,

Esta configuración es necesaria para que Etherpad funcione junto con Nginx.

Guarde el archivo presionando Control + X y entrando Y cuando se le solicite una vez terminado.

Salga del shell de usuario de Etherpad.

[[email protected] etherpad-lite]$ exit

Paso 7 – Crear servicio Etherpad

Para iniciar Etherpad en el arranque y administrar el proceso usando systemctl, necesitamos crear un archivo de servicio.

Cree y abra el archivo de servicio.

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

Pegue 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

Guarde el archivo presionando Control + X y entrando Y cuando se le solicite una vez terminado.

Vuelva a cargar el demonio de servicio para obtener la nueva configuración.

$ sudo systemctl daemon-reload

Habilite Iniciar el servicio Etherpad.

$ sudo systemctl enable etherpad --now

Consultar el estado del servicio.Publicidad

$ 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: instale SSL usando Let’s Encrypt

Para instalar un certificado SSL usando Let’s Encrypt, necesitamos instalar la herramienta Certbot.

En primer lugar, debe descargar e instalar el repositorio EPEL.

$ sudo dnf install epel-release

Ejecute los siguientes comandos para instalar Certbot.

$ sudo dnf install certbot

Genere 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 su servidor.

Generar un grupo Diffie-Hellman certificado.

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

Cree un directorio webroot de desaf√≠o para la renovaci√≥n autom√°tica de Let’s Encrypt.

$ sudo mkdir -p /var/lib/letsencrypt

Cree un trabajo cron para renovar el SSL. Se ejecutará todos los días para verificar el certificado y renovarlo si es necesario. Para eso, primero, cree el archivo /etc/cron.daily/certbot-renew y ábralo para editarlo.

$ sudo nano /etc/cron.daily/certbot-renew

Pegue el siguiente código.

#!/bin/sh
certbot renew --cert-name etherpad.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"

Guarde el archivo presionando Control + X y entrando Y Cuando se le solicite.

Cambie los permisos en el archivo de tareas 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 anterior de Nginx. Para instalar la √ļltima versi√≥n, debe agregar el repositorio Nginx.

Cree y abra el archivo /etc/yum.repos.d/nginx.repo para editarlo.

$ sudo nano /etc/yum.repos.d/nginx.repo

Pegue el siguiente código en él.

[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

Guarde el archivo presionando Control + X y entrando Y cuando se le solicite una vez terminado.

Instala Nginx.

$ sudo dnf install nginx

Habilite el servicio Nginx.

$ sudo systemctl enable nginx

A continuación, cree y abra /etc/nginx/conf.d/etherpad.conf para editarlo.

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

Pegue el siguiente código en él.

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;
}

Guarde el archivo presionando Control + X y entrando Y cuando se le solicite una vez terminado.

Verifique 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 recibe el siguiente error, deber√° editar el archivo /etc/nginx/nginx.conf para agregar/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

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

$ sudo nano /etc/nginx/nginx.conf

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

server_names_hash_bucket_size  64;

Guarde el archivo presionando Control + X y entrando Y Cuando se le solicite. Vuelva a validar Nginx.

Finalmente, inicie el servicio Nginx para habilitar la nueva configuración.

$ sudo systemctl start nginx

Inicie la URL https://etherpad.example.com en su navegador y se abrir√° la p√°gina de inicio de Etherpad. Ahora puede usarlo para editar documentos e invitar a colaboradores.

Actualización de Etherpad

Actualizar Etherpad es f√°cil. El primer paso es cambiar al shell de usuario de Etherpad.

$ sudo -u etherpad bash

Cambie al directorio /opt/etherpad/etherpad-lite.

[[email protected] user] cd /opt/etherpad/etherpad-lite

Extraiga el √ļltimo repositorio de Etherpad en el directorio /opt/etherpad/etherpad-lite.

[[email protected] ~]$ git pull origin

Ejecute el script run.sh de Etherpad para configurar la √ļltima versi√≥n de Etherpad.

[[email protected] etherpad-lite]$ src/bin/run.sh

Conclusión

En este tutorial, configuramos Etherpad Collaborative Editor con el servidor Nginx y lo aseguramos con los certificados Let’s Encrypt SSL. Su instalaci√≥n de Etherpad est√° lista para usar y puede ampliarla con m√°s funciones, incluidos usuarios autenticados, complementos y personalizaciones de la interfaz de usuario.

Si tiene alguna pregunta, publíquela en los comentarios a continuación.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *