El siguiente artículo asume que ya está familiarizado con lo que es Etherpad. Si eso
no es el caso, entonces el artículo de wikipedia debería ser suficiente para una introducción rápida.
Aunque el proyecto Etherpad está bien documentado, no siempre es fácil
tener sentido a partir de la documentación. Este artículo pretende condensar algunos de los
tutoriales disponibles en el wiki del proyecto de una manera fácil de seguir.
Cubriremos lo siguiente:
- Instalación de Etherpad como servicio
- Habilitación de TLS con certificados autofirmados
- Usando
mysql
base de datos - Uso de Nginx con Etherpad
Instalación de Etherpad
A partir de ahora, Debian 11 no proporciona ningún etherpad
paquetes Entonces, tendremos que
instálelo manualmente desde GitHub. Afortunadamente, los pasos son muy fáciles (el
#
denota raíz):
- Cree un usuario
etherpad
y asígnelo aletherpad
grupo:
# useradd --comment "Etherpad Service User"
--create-home --home-dir /usr/local/etherpad --user-group etherpad
- Descargue y ejecute el script de configuración:
# curl -sL https://deb.nodesource.com/setup_14.x
|bash -
- Instalar
nodejs
. También necesitaremosgit
.
# apt install -y nodejs git
- Cambiar al
etherpad
usuario y clone el repositorio del proyecto.
# su - etherpad
etherpad$ git clone --depth 1 --branch masterhttps://github.com/ether/etherpad-lite.git/usr/local/etherpad/src
- Instala las dependencias requeridas:
etherpad$ /usr/local/etherpad/src/bin/installDeps.sh
- Cree un archivo de unidad systemd en
/etc/systemd/system/
directorio.
/etc/systemd/system/etherpad.service
:
[Unit]
Description=Etherpad Service
After=syslog.target network.target
[Service]
Type=simple
User=etherpad
Group=etherpad
WorkingDirectory=/usr/local/etherpad/src
Environment=NODE_ENV=production
ExecStart=/usr/bin/node --experimental-worker /usr/local/etherpad/src/node_modules/ep_etherpad-lite/node/server.js
[Install]
WantedBy=multi-user.target
- Permitir cortafuegos, etc. para abrir el puerto
9001
.Entonces, finalmente podemos empezar
eletherpad
Servicio:
# systemctl start etherpad
Todavía tenemos muchas configuraciones por hacer. Sin embargo, ahora podemos ver la instancia de etherpad en nuestro navegador.
Habilitación de TLS con certificados autofirmados
Si desea que una Autoridad de certificación (CA) firme sus certificados, puede hacerlo. Sin embargo, aquí voy a autofirmar todo. Me refiero al artículo wiki que se puede encontrar aquí.
Abra settings.json
en el etherpad
directorio y busque la sección ssl
(debería estar alrededor de la línea 174) y modifíquelo en consecuencia:
"ssl" : {
"key" : "https://1118798822.rsc.cdn77.org/usr/local/etherpad/ssl/epl-server.key",
"cert" : "https://1118798822.rsc.cdn77.org/usr/local/etherpad/ssl/epl-server.crt"
}
Cree un directorio /usr/local/etherpad/ssl
como el etherpad
usuario, cd
en ese directorio y ejecute los siguientes comandos.
Genere la clave del servidor proporcionando la frase de contraseña requerida:
openssl genrsa -des3 -out epl-server.key 4096
Ahora genere los certificados:
openssl req -new -key epl-server.key -out epl-server.csr
openssl x509 -req -days 9000 -in epl-server.csr -signkey epl-server.key -out epl-server.crt
Ahora vamos a usar ese archivo para crear otra clave. De esa forma, no tendremos que proporcionar una frase de contraseña cada vez que se inicie nuestro servidor.
Cambiar el nombre de la clave:
mv epl-server.key epl-server.key.secure
Luego genera nuestra segunda clave:
openssl rsa -in epl-server.key.secure -out epl-server.key
Ahora necesitamos autofirmar nuestros certificados. Para eso tenemos que generar otra clave que firmará nuestro
epl-server.key
. Los pasos son similares a los anteriores.
openssl genrsa -des3 -out own-ca.key 4096
Cree un certificado de firma:
openssl req -new -x509 -days 9000 -key own-ca.key -out own-ca.crt
Esto nos pedirá alguna información. Se pueden dejar por defecto pero el Nombre Común (CN) debe ser diferente al CN de nuestra propia clave. Así que simplemente podemos agregar "(CA)" al CN.
Finalmente firmemos nuestro epl-server.key
con el certificado de nuestra CA.
openssl x509 -req -days 9000 -in epl-server.csr -CA own-ca.crt -CAkey own-ca.key -set_serial 001 -out epl-server.crt
Esto dará como resultado un epl-server.crt
autofirmado archivo.
Ahora asegúrese de que los archivos tengan permisos seguros:
chmod 400 epl-server.key
chown etherpad epl-server.key
chmod 400 epl-server.crt
chown etherpad epl-server.crt
Otros archivos se pueden mover a un lugar diferente o simplemente eliminar. Voy a dejarlos como están por ahora. No obstante, podemos reiniciar el etherpad
servicio ahora y obtendremos https
funcionando aunque los navegadores arrojarán advertencias e incluso se negarán a conectarse ya que nuestros certificados no se proporcionaron con la información adecuada.
Uso de MySQL con Etherpad
Hasta ahora, nuestra instancia de Etherpad ha estado usando dirtyDB
base de datos que no es adecuada solo para fines de prueba/desarrollo. Para que nuestra instancia sea completamente adecuada para la producción, ahora cambiaremos a mysql
. Una vez más, todos los créditos de las instrucciones de instalación van a la wiki del proyecto. Simplemente decidí, para resumir todo en un solo lugar, no hacerte saltar a diferentes enlaces.
Entonces, instalemos los paquetes requeridos (estoy usando mariadb
pero las cosas son básicamente lo mismo):
# apt install -y mariadb-server
Ahora ejecute mysql_secure_installation
como root proporcionando los parámetros requeridos.
Una vez hecho esto, podemos proceder a configurar la base de datos:
1. Conéctese a mysql con el siguiente comando:
# mysql -u root -p
2. Una vez dentro, crea una base de datos:
CREATE DATABASE `etherpad_lite_db`;
Sí, esos son acentos graves alrededor del nombre de la base de datos. Y no olvides el punto y coma 😉
3. Cree un usuario de base de datos proporcionando su propio nombre de usuario y contraseña:
CREATE USER '<username>'@'localhost' identified by '<pass>';
4. Cambie los permisos para el nuevo usuario:
GRANT CREATE,ALTER,SELECT,INSERT,UPDATE,DELETE on `etherpad_lite_db`.* to 'etherpad'@'localhost';
Aquí, etherpad
fue el usuario que creé anteriormente.
Nuestra base de datos está creada, por lo que ahora podemos exit
desde el aviso y proceda a dejar que el etherpad
servicio conozca los logros que hemos logrado, es decir, modificando el settings.json
archivo.
Busque el dbtype
con su editor de texto, debería estar alrededor de la línea 196 y cámbielo para que se parezca a lo siguiente:
"dbType": "mysql",
"dbSettings": {
"user" : "etherpad",
"port" : "https://1118798822.rsc.cdn77.org/var/run/mysqld/mysqld.sock",
"password": "<pass>",
"database": "etherpad_lite_db",
"charset" : "utf8mb4"
}
Obviamente, no voy a revelar la contraseña aquí. Eso sería peligroso ya que uso el mismo para todas mis cuentas (no, en realidad no; no reutilices las contraseñas).
Ahora podemos reiniciar los servicios:
# systemctl restart mysqld etherpad
Uso de Nginx con Etherpad
Ahora configuremos nginx
para reenviar el tráfico http/s estándar al etherpad
Servicio.
Asegurémonos de tener nginx
instalado:
# apt install nginx
Cree un archivo en /etc/nginx/sites-available/etherpad
y que su contenido sea:
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name localhost; # CHANGE THIS!
access_log /var/log/nginx/eplite.access.log;
error_log /var/log/nginx/eplite.error.log;
ssl on;
ssl_certificate /etc/nginx/ssl/epl-server.crt;
ssl_certificate_key /etc/nginx/ssl/epl-server.key;
location / {
proxy_pass https://127.0.0.1:9001;
proxy_buffering off;
proxy_set_header Host $host;
proxy_pass_header Server;
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; # apparently 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;
}
}
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
# enforce HTTPS
server {
listen 80;
listen [::]:80;
server_name localhost; # CHANGE THIS!
return 301 https://127.0.0.1:9001/;
}
Ahora ejecute los siguientes comandos:
doas mkdir /etc/nginx/ssl
doas cp /usr/local/etherpad/ssl/epl-server.crt /etc/nginx/ssl/
doas cp /usr/local/etherpad/ssl/epl-server.key /etc/nginx/ssl/
Como puede ver, solo estamos copiando los certificados SSL y las claves en nginx.
Nginx viene con un archivo de configuración predeterminado que está habilitado. Arreglemos eso.
# rm /etc/nginx/sites-enabled/default
Y habilitemos nuestro etherpad
archivo de configuración para nginx.
# ln -s /etc/nginx/sites-available/etherpad /etc/nginx/sites-enabled/etherpad
Asegúrate de no haber cometido ningún error en la configuración:
# nginx -t
Ahora reiniciemos nuestros servicios por última vez:
# systemctl restart etherpad mysqld nginx
Nuestra configuración está básicamente terminada. Por supuesto, podemos hacer más, pero creo que hemos hecho lo suficiente (además de cambiar cosas obvias como el hecho de que configuramos nuestra propia CA) para que esto sea utilizable. Dejaré al lector explorar más a partir de
los diversos recursos que he vinculado a lo largo del artículo. Eso es todo por ahora. Gracias por leer hasta el final. No olvide consultar mis otros artículos en unixcop.com.