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 autoalojado 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
-
Un sistema que ejecuta Rocky Linux 8.
-
Un usuario no root con privilegios sudo.
-
Un nombre de dominio apuntado al servidor.
-
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.
-
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
Abre el 9001
puerto 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ía ver un resultado similar.
cockpit dhcpv6-client http https ssh
Vuelva a cargar el cortafuegos 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
Agregar configuración inicial.
$ git config --global user.name "YourName" $ git config --global user.email "[email protected]"
Enumere la configuración que acaba de configurar.
$ 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 usando el siguiente comando.
$ sudo dnf module enable mariadb:10.5
Instale MariaDB.
$ sudo dnf install mariadb-server
Habilite e inicie el servicio MariaDB.
$ sudo systemctl enable mariadb --now
Consulta el estado del servicio.
$ sudo systemctl status mariadb
Proteja 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 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:descargar e instalar Etherpad
Para instalar Etherpad, descargaremos su código fuente y lo construiremos.
El primer paso es crear un nuevo etherpad
usuario usando el siguiente comando.
$ sudo adduser --system --home /opt/etherpad --create-home --user-group etherpad
Este comando crea un --system
usuario, lo que significa que no puede iniciar sesión y no tiene contraseña. También le damos un directorio de inicio /opt/etherpad
que es donde descargaremos Etherpad. El --create-home
flag crea el directorio de inicio con los permisos correctos. El --user-group
flag crea un grupo con el mismo nombre que el nombre de usuario.
Cambiar al etherpad
usuario para descargar e instalar la aplicación.
$ sudo -u etherpad bash
Cambie a /opt/etherpad
directorio.
[[email protected] user] cd /opt/etherpad
Clone el repositorio de Etherpad en /opt/etherpad
directorio.
[[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 run.sh
de Etherpad script para configurar e instalar 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.
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 settings.json
archivo 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.
Encuentra el siguiente código y coméntalo poniendo //
frente a él.
// "dbType": "dirty", // "dbSettings": { // "filename": "var/dirty.db" // },
Luego, encuentre el siguiente código y cambie 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" },
Finalmente, desplácese un poco hacia abajo para encontrar el trustProxy
configuración y cambiar su valor de false
a true
.
"trustProxy": true,
Esta configuración es necesaria para que Etherpad funcione junto con Nginx.
Guarde el archivo presionando Ctrl + X e ingresando Y cuando se le solicite una vez terminado.
Salga del shell de usuario de Etherpad.
[[email protected] etherpad-lite]$ exit
Paso 7:crear el 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 Ctrl + X e ingresando 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
Consulta 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:instale SSL con 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 de 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 /etc/letsencrypt/live/etherpad.example.com
directorio en 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 crea 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 Ctrl + X e ingresando 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 editar.
$ 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 Ctrl + X e ingresando 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 el /etc/nginx/conf.d/etherpad.conf
para editar.
$ 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 Ctrl + X e ingresando 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 obtiene 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 editar.
$ 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 Ctrl + X e ingresando 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á Etherpad home. 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 a /opt/etherpad/etherpad-lite
directorio.
[[email protected] user] cd /opt/etherpad/etherpad-lite
Obtenga el último repositorio de Etherpad en /opt/etherpad/etherpad-lite
directorio.
[[email protected] ~]$ git pull origin
Ejecute el run.sh
de Etherpad script 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.