Cómo instalar Etherpad con Nginx y SSL en Debian 11

Etherpad es una alternativa gratuita y de código abierto a servicios como Google Docs y Zoho Writer. Etherpad es un editor de texto colaborativo y en tiempo real para tu equipo, es accesible desde cualquier lugar y en cualquier momento porque Etherpad es un editor de texto basado en la web.

Cualquier cambio en Etherpad se produce en tiempo real, y además Etherpad es compatible con el control de versiones y el formato incorporado para los equipos. Etherpad es un editor altamente personalizable con el apoyo de varios plugins. Y también soporta formatos de documentos modernos como doc, pdf, odt, markdown, etc.

En este tutorial, instalarás y configurarás el Editor Colaborativo en Tiempo Real Etherpad en Debian 11 Bullseye. Este tutorial utiliza MariaDB como backend de la base de datos y el servidor web Nginx como proxy inverso con el HTTPS seguro activado. Al final, tendrás el Etherpad instalado y protegido mediante encriptación HTTPS segura.

Requisitos previos

Para completar este tutorial, primero necesitarás los siguientes requisitos:

  • Un servidor Debian 11, para pruebas puedes utilizar 1 GB de RAM. Para producción, puedes utilizar más recursos, dependiendo de tu entorno y uso.
  • Un usuario no root con privilegios de root. Opcionalmente, puedes utilizar el usuario root.
  • Un nombre de dominio para la instalación, y asegúrate de que apunta a la dirección IP del servidor. En este ejemplo, utilizaremos el dominio«etherpad.example.io«.

Cuando tengas todos estos requisitos previos, pasa a la primera sección para iniciar la instalación.

Instalación de las dependencias de los paquetes

Etherpad es una aplicación web construida sobre Node.js. En el momento de escribir esto, la última versión de Etherpad es xxx, y requiere al menos la versión 14.x de Node.j s. En esta sección, instalarás algunas dependencias de paquetes, incluyendo Node.js en el servidor Debian 11.

1. En primer lugar, actualiza la lista del índice de paquetes, y luego instala las dependencias de construcción ejecutando el siguiente comando.

sudo apt update
sudo apt install gzip git curl python libssl-dev pkg-config gcc g++ make build-essential -y

2. En este tutorial, instalarás Node.js desde el repositorio Nodesource, que proporciona múltiples versiones de Node.js. Este tutorial utiliza la versión 16.x de Node.js para la instalación de Etherpad.

Ahora, ejecuta el siguiente comando para añadir el repositorio de Node.js a tu sistema. Este comando añadirá automáticamente el repositorio Nodesource para refrescar tu índice de paquetes.

curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash -

3. A continuación, instala Node.js 16.x desde el repositorio Nodesource ejecutando el siguiente comando.

sudo apt install nodejs -y

4. Una vez completada la instalación, verifica tu versión de Node.js con el siguiente comando.

node --version

Recibirás una salida como ‘blah blah’.

En esta sección, has instalado las dependencias de los paquetes para Etherpad y la versión 16.x de Node.js desde el repositorio Nodesource. A continuación, instalarás y configurarás la base de datos MariaDB.

Instalación y configuración de la base de datos MariaDB

En esta sección, instalarás la base de datos MariaDB en el servidor Debian 11. A continuación, configurarás la contraseña de root para MariaDB y, por último, crearás una nueva base de datos y un usuario para Etherpad.

1. Por defecto, los paquetes de MariaDB están disponibles en el repositorio de Debian 11. Ejecuta el siguiente comando para instalarlo.

sudo apt install mariadb-server -y

2. Cuando la instalación de MariaDB se haya completado, se ejecutará y habilitará automáticamente.

MariaDB proporciona una herramienta de línea de comandos que te ayuda a desplegar MariaDB de forma segura, incluyendo la configuración de la contraseña de root para MariaDB. Ejecuta el comando‘mysql_secure_installation ‘ como se indica a continuación.

mysql_secure_installation

Ahora se te harán algunas preguntas relacionadas con la instalación de MariaDB y se te pedirá que configures la contraseña de root.

3. El usuario raíz por defecto de mariaDB no tiene contraseña, pulsa ENTER.

Enter current password for root (enter for none):
OK, successfully used password, moving on...

4. Ahora se te pedirá que cambies el método de autenticación utilizando‘unix_socket‘, escribe‘Y‘ para aceptar.

Switch to unix_socket authentication [Y/n] Y
Enabled successfully!
Reloading privilege tables..
 ... Success!

5. EscribeY’ para establecer una nueva contraseña de root para MariaDB. A continuación, introduce tu contraseña fuerte y repite.

Change the root password? [Y/n] Y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
 ... Success!

6. La instalación por defecto de MariaDB viene con un usuario anónimo. Escribe «Y» para eliminarlo.

Remove anonymous users? [Y/n] Y
 ... Success!

7. Ahora, desactiva el inicio de sesión remoto para el usuario raíz de MariaDB. Escribe«Y» para aceptar.

Disallow root login remotely? [Y/n] Y
 ... Success!

8. A continuación, teclea«Y» para aceptar y eliminar la base de datos por defecto«test» y todos los privilegios sobre ella.

Remove test database and access to it? [Y/n] Y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

9. Por último, recarga los privilegios de la tabla para aplicar una nueva configuración. Escribe «Y« para aceptar y pulsa ENTER.

Reload privilege tables now? [Y/n] Y
 ... Success!

Cuando se haya completado toda la configuración, recibirás un mensaje de salida como‘¡Todo hecho!‘ como el que aparece a continuación.

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

10. A continuación, ejecuta el siguiente comando para entrar en el shell de MariaDB. Se te pedirá la contraseña de root de MariaDB. Introduce tu contraseña.

mysql -u root -p

11. Ahora, crea una nueva base de datos y un nuevo usuario para el Etherpad ejecutando las siguientes consultas. Este ejemplo creará una nueva base de datos‘etherpad_lite_db‘ con el usuario‘etherpaduser‘ y la contraseña‘StrongPasswordEtherpadDB‘. Asegúrate de cambiar la contraseña.

CREATE DATABASE etherpad_lite_db;
CREATE USER etherpaduser@localhost IDENTIFIED BY 'StrongPasswordEtherpadDB';
GRANT CREATE,ALTER,SELECT,INSERT,UPDATE,DELETE on etherpad_lite_db.* to etherpaduser@localhost;

12. Después, recarga todos los privilegios de las tablas para aplicar una nueva configuración y, a continuación, ejecuta la consulta ‘exit’ para salir del shell de mariaDB.

FLUSH PRIVILEGES;
EXIT

Crear una nueva base de datos etherpad

En esta sección, has completado la instalación y configuración de la base de datos MariaDB en Debian 11. También has creado la base de datos y el usuario para el Etherpad. A continuación, descargarás el código fuente de Etherpad y lo instalarás.

Instalación y configuración de Etherpad

En esta sección, instalarás el Etherpad desde el código fuente, luego lo configurarás con MariaDB como base de datos y crearás un nuevo archivo systemd para el Etherpad. Al final, el Etherpad se ejecutará como un servicio systemd.

1. Antes de descargar el código fuente de Etherpad vas a crear un nuevo usuario‘etherpad‘ en tu sistema. Este usuario se utilizará para ejecutar el script de instalación de Etherpad y ejecutar el servicio Etherpad.

Ejecuta el comando‘adduser‘ que aparece a continuación para crear un nuevo usuario ‘etherpad‘. Además, define el directorio principal como ‘/opt/etherpad-lite‘. Este directorio se utilizará para almacenar todas las fuentes de Etherpad.

sudo adduser --system --no-create-home --home=/opt/etherpad-lite --group etherpad

2. Ahora, navega al directorio‘/opt‘ y clona el código fuente de Etherpad utilizando el comando git.

cd /opt/
git clone --branch master https://github.com/ether/etherpad-lite.git

3. Después, cambia la propiedad del directorio ‘etherpad-lite’ al usuario‘etherpad‘ y al grupo‘etherpad‘.

sudo chown -R etherpad:etherpad etherpad-lite

4. Ahora navega al directorio ‘etherpad-lite/‘ e instala todas las dependencias de Node.js utilizando el script instalador ‘installDeps.sh ‘ como se indica a continuación. El script instalador ‘ installDeps.sh’ se ejecutará como usuario no root ‘etherpad’.

cd /opt/etherpad-lite
sudo su -s /bin/bash -c "./bin/installDeps.sh" etherpad

Espera a que se complete la instalación de todas las dependencias de los paquetes.

A continuación, modifica el archivo‘settings.json‘ para configurar tu instalación de Etherpad. Puedes utilizar un editor nano para editar ese archivo o utilizar tu editor preferido.

nano settings.json

En la parte superior de la línea, cambia el título por tu propio título. En este ejemplo se utiliza el título‘Entherpad Johndoe‘.

  "title": "Etherpad Johndoe",

En este tutorial, el Etherpad se ejecutará bajo el proxy inverso Nginx. Y es bueno para la seguridad ejecutar el Etherpad en el localhost. Ahora, cambia la configuración de‘ip:’ a‘127.0.0.1’. Con esta configuración, el Etherpad se ejecutará sólo en el localhost.

  "ip": "127.0.0.1",
  "port": 9001,

Por defecto, el Etherpad utiliza SQLite como base de datos. Comenta todas estas líneas para desactivarlas.

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

Ahora, introduce la configuración de la base de datos MariaDB que aparece a continuación. Y asegúrate de cambiar el nombre de la base de datos, el usuario y la contraseña.

  "dbType" : "mysql",
  "dbSettings" : {
    "user":     "etherpaduser",
    "host":     "localhost",
    "port":     3306,
    "password": "StrongPasswordEtherpadDB",
    "database": "etherpad_lite_db",
    "charset":  "utf8mb4"
  },

Guarda y sal del archivo.

A continuación, crea un nuevo archivo de servicio systemd‘etherpad.service‘ en el directorio‘/etc/systemd/system‘. Este archivo contendrá todos los detalles de configuración que Etherpad necesita para funcionar correctamente en el servidor. Créalo utilizando un editor nano.

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

Añade la siguiente configuración en el archivo.

[Unit]
Description=Etherpad-lite, the collaborative editor.
After=syslog.target network.target

[Service]
Type=simple
User=etherpad
Group=etherpad
WorkingDirectory=/opt/etherpad-lite
Environment=NODE_ENV=production
ExecStart=/usr/bin/node --experimental-worker /opt/etherpad-lite/node_modules/ep_etherpad-lite/node/server.js
# use mysql plus a complete settings.json to avoid Service hold-off time over, scheduling restart.
Restart=always

[Install]
WantedBy=multi-user.target

Este archivo de servicio se ejecutará como usuario y grupo ‘etherpad’. Y observarás la opción‘Environment=NODE_ENV=production‘, que significa que la aplicación Etherpad se ejecutará en el entorno de producción. La opción ‘ExecStart=.‘ es el comando por defecto para ejecutar la aplicación Etherpad.

Guarda y cierra el archivo.

Ahora, vuelve a cargar el gestor systemd para aplicar un nuevo archivo de servicio.

sudo systemctl daemon-reload

Después, inicia y habilita el servicio etherpad, y verifica su estado ejecutando el siguiente comando.

sudo systemctl enable --now etherpad
sudo systemctl status etherpad

Recibirás una salida similar a la de la siguiente captura de pantalla. El servicio etherpad está ahora«activo (en ejecución)«, se iniciará automáticamente al arrancar el sistema, y se está ejecutando en el localhost con el puerto por defecto«9001«.

Configurar etherpad como servicio

En este punto, has completado la instalación de Etherpad. A continuación, instalarás Nginx y lo configurarás como proxy inverso para la aplicación Etherpad.

Instalación y configuración de Nginx

Para el entorno de producción, siempre se recomienda poner un proxy inverso delante de tu aplicación. Aumentará el rendimiento y la seguridad de tu aplicación. En esta sección, instalarás y configurarás el servidor web Nginx como proxy inverso. Al final, tendrás el Etherpad funcionando con tu nombre de dominio y asegurado con el protocolo HTTPS.

1. Al principio, instala los paquetes de Nginx ejecutando el siguiente comando.

sudo apt install nginx -y

2. Ahora, si tienes el cortafuegos UFW en tu sistema Debian. Permite el acceso público a los puertos HTTP y HTTPS (80 y 443) ejecutando el comando‘ufw‘ que aparece a continuación.

sudo ufw allow "Nginx Full"

Recibirás la siguiente salida.

Rule added
Rule added (v6)

3. A continuación, crea un nuevo archivo de host virtual Nginx‘etherpad‘ en el directorio‘/etc/nginx/sites-available/‘. Créalo utilizando un editor nano o tu editor preferido.

sudo nano /etc/nginx/sites-available/etherpad

Copia y pega la siguiente configuración en el archivo. Además, sustituye el nombre de tu dominio y la ruta del certificado SSL por tu propia información. Para los certificados SSL, puedes generar certificados SSL libremente utilizando Letsencrypt.

# enforce HTTPS
server {
    listen       80;
    listen       [::]:80;
    server_name  etherpad.example.io;
    return 301   https://$host$request_uri;
}

# we're in the http context here
map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}

server {
    listen       443 ssl http2;
    listen       [::]:443 ssl http2;
    server_name  etherpad.example.io;

    access_log  /var/log/nginx/eplite.access.log;
    error_log   /var/log/nginx/eplite.error.log;

    ssl_certificate      /etc/letsencrypt/live/etherpad.example.io/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/etherpad.example.io/privkey.pem;

    ssl_session_timeout  5m;

    ssl_protocols TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \
    EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \
    EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS";

    location / {
        proxy_pass         http://127.0.0.1:9001;
        proxy_buffering    off; # be careful, this line doesn't override any proxy_buffering on set in a conf.d/file.conf
        proxy_set_header   Host $host;
        proxy_pass_header  Server;

        # Note you might want to pass these headers etc too.
        proxy_set_header    X-Real-IP $remote_addr; # https://nginx.org/en/docs/http/ngx_http_proxy_module.html
        proxy_set_header    X-Forwarded-For $remote_addr; # EP logs to show the actual remote IP
        proxy_set_header    X-Forwarded-Proto $scheme; # for EP to set secure cookie flag when https is used
        proxy_http_version  1.1; # recommended with keepalive connections

        # WebSocket proxying - from https://nginx.org/en/docs/http/websocket.html
        proxy_set_header  Upgrade $http_upgrade;
        proxy_set_header  Connection $connection_upgrade;
    }
}

Este archivo de host virtual de Nginx redirigirá automáticamente cualquier tráfico de HTTP al protocolo seguro HTTPS. Para la depuración en caso de error, comprueba el archivo de registro ‘/var/log/nginx/eplite.error.log‘. Todas las peticiones de los clientes se enviarán al backend‘proxy_pass‘ la aplicación Etherpad que se ejecuta en el puerto localhost 9001.

4. Guarda y cierra el archivo, luego activa la configuración del host virtual creando un enlace simbólico del archivo‘etherpad‘ al directorio ‘/etc/nginx/sites-enabled‘.

sudo ln -s /etc/nginx/sites-available/etherpad /etc/nginx/sites-enabled/

5. A continuación, ejecuta el comando‘nginx -t’ para verificar la configuración de nginx. Este comando comprobará cualquier error de sintaxis en la configuración.

sudo nginx -t

Recibirás una salida como la que se muestra a continuación. El mensaje de salida‘syntax is ok‘ significa que no tienes ningún error.

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful.

6. Por último, reinicia el servicio Nginx para aplicar un nuevo archivo de host virtual Nginx.

sudo systemctl restart nginx

En esta sección, has completado la instalación y configuración de Nginx como proxy inverso para la aplicación Etherpad. Tu Etherpad ya está disponible en http://etherpad.example.io.

Configurar Nginx como proxy inverso para Etherpad

Verificar la instalación de Etherpad

1. Abre tu navegador web y escribe el nombre de dominio‘http://etherpad.example.io/’ en la dirección. Y serás redirigido automáticamente a la conexión segura HTTPS como se indica a continuación.

Etherpad Crear nueva almohadilla

2. Para crear un nuevo pad, introduce el nombre del pad en la columna y haz clic en el botón«Aceptar«.

Ahora verás el Editor de Colaboración en Tiempo Real de Etherpad como se indica a continuación.

Editor de colaboración de Etherpad

Conclusión

En este tutorial, has instalado y configurado el editor de colaboración en tiempo real Etherpad en el servidor Debian 11. Además, has instalado y configurado Nginx como proxy inverso para la aplicación Etherpad.

Ahora estás preparado para utilizar Etherpad como editor colaborativo en tu equipo. Para más información sobre Etherpad, consulta la documentación oficial de Etherpad.

También te podría gustar...