Howto Etherpad
- Documentation : https://etherpad.org/doc/v1.8.18/
- Code : https://github.com/ether/etherpad-lite
- Licence : Apache-2.0
- Langage : Javascript
- Ansible : à venir
Etherpad est une application web de rédaction collaborative en temps réel développée en node.js.
Installation
Nous installons la version 2.x sous Debian 12 (Bookworm) en mode manuel. (Il y a aussi un mode d’installation pour Docker.)
Etherpad s’appuie sur NodeJS (avec pnmp) et peut être configurée avec différents SGBD (MariaDB/MySQL, PostgreSQL, SQLite) et proxy web (Nginx, Apache, HAProxy, Varnish, etc). Dans la présente documentation, nous montrons comment faire avec MariaDB et Nginx.
Pour l’installation des dépendances, se référer à NodeJS pour l’installation de NodeJS 18.x, MariaDB/MySQL et Nginx
Si pnmp n’a pas été activé, après l’installation de NodeJS, il faut jouer la commande suivante :
# corepack enable pnpm
Compte UNIX
Créer un compte UNIX etherpad :
# adduser --disabled-login --gecos 'etherpad App' etherpad
MariaDB
Créer (par exemple) la base de données etherpad et l’utilisateur Mariadb du même nom :
# mysqladmin create etherpad;
# mysql
MariaDB [(none)]> GRANT ALL PRIVILEGES ON etherpad.* TO 'etherpad'@'localhost' IDENTIFIED BY 'PASSWORD';
Note : Pensez à conserver le mot de passe pour la suite.
Etherpad
On clone le dépôt et on bâtit l’application :
# su -s/bin/bash - etherpad
$ git clone https://github.com/ether/etherpad-lite.git
$ cd etherpad-lite/
$ git checkout 2.0.3
$ src/bin/run.sh
Le script run.sh s’occuper d’installer et de configurer tout et lance même etherpad en mode devel sur http://0.0.0.0:9001 Une fois confirmé qu’Etherpad fonctionne, vous pouvez quitter en appuyant sur
Ctrl + Csur le clavier.
On édite le fichier settings.json généré par
src/bin/run.sh. Vous devrez nécessairement modifier au
minimum les valeurs des variables relatives à la base de données et il
est recommandé de faire passer la valeur de la variable ip
de 0.0.0.0 à 127.0.0.1.
{
"ip": "127.0.0.1",
"dbType" : "mysql",
"dbSettings" : {
"user": "etherpad",
"socketPath": "/run/mysqld/mysqld.sock",
"password": "PASSWORD",
"database": "etherpad",
"charset": "utf8mb4"
},
}
Pour ajuster plus de paramètres, on peut s’appuyer sur la
documentation très claire contenue dans le fichier
settings.json.template.
Unité systemd
Pour lancer l’application au démarrage du serveur, on met le texte
suivant dans le nouveau fichier
/etc/systemd/system/etherpad.service
[Unit]
Description=Etherpad - open source online editor for real-time collaborative editing.
Documentation=https://etherpad.org/doc/v2.0.3/
After=network.target
After=mariadb.service
[Service]
Type=simple
Environment=NODE_ENV=production
ExecStart=/usr/bin/pnpm --filter ep_etherpad-lite run prod
Restart=always
User=etherpad
Group=etherpad
WorkingDirectory=/home/etherpad/etherpad-lite
[Install]
WantedBy=multi-user.target
On active et on démarre l’unité en question :
# systemctl enable etherpad.service
# systemctl start etherpad.service
Nginx
Pour accéder à l’application depuis Internet, on place nginx devant,
qui agira comme serveur mandataire (proxy). Il faut mettre le
texte suivant dans le nouveau fichier
/etc/nginx/sites-available/etherpad.conf :
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 80;
listen [::]:80;
server_name etherpad.example.com;
# Let's Encrypt
include /etc/nginx/snippets/letsencrypt.conf;
# Redirect all to https (port 443)
location / { return 301 https://$host$request_uri; }
}
server {
listen [::]:443 ssl http2;
listen 443 ssl http2;
server_name etherpad.example.com;
ssl_certificate /etc/letsencrypt/live/etherpad.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/etherpad.example.com/privkey.pem;
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;
}
}
Note : La partie SSL/TLS n’est pas développée. Vous pouvez par exemple générer et configurer un certificat Let’s Encrypt avec certbot. N’oubliez donc pas de modifier les directives
ssl_dans le vhost.
On active le vhost, on vérifie sa syntaxe et si tout est beau on recharge la configuration de nginx :
# ln -s /etc/nginx/sites-available/etherpad.conf /etc/nginx/sites-enabled/etherpad.conf
# nginx -t
# systemctl reload nginx.service
Côté configuration d’etherpad, dans le fichier
settings.json, il faut passer la directive
trustProxy à true pour que etherpad
accepte les IP clientes données dans les headers
X-Forwarded-For pour les donner dans les logs
Mises à jour
Les mises à jour peuvent être récupérées comme ceci :
# systemctl stop etherpad.service
# su -s/bin/bash - etherpad
$ cd etherpad-lite
$ git fetch origin && git checkout <NOUV_VERSION>
$ ./bin/installDeps.sh
$ exit
# systemctl start etherpad.service
Note : Ces commandes ne sont parfois pas suffisantes. Vous devez systématiquement lire les notes de versions.
Configuration
Etherpad est configurable via le fichier settings.json
ou des variables d’environnement.
Il y a +200 plugins disponibles, dont environ 80 sont officiels.
Utilisation de l’API
Son accès se fait via https://pad.example.com/api/ où la version
est indiqué.
Systématiquement, il y aura besoin de renseigner une clé qui se trouve sur le système de fichier :
$ cat etherpad-lite/APIKEY.txt
Supprimer un pad
Admettons que nous avons le pad https://pad.example.com/p/monsuperpad où
monsuperpad est le padID.
$ curl "https://pad.example.com/api/1.2.15/deletePad?apikey=${APIKEY}&padID=monsuperpad"
C’est aussi possible de le faire via l’interface d’administration https://pad.example.com/admin/.
Lister les pad
$ curl -s "https://pad.example.com/api/1.2.15/listAllPads?apikey=${APIKEY}"
FAQ
À propos des logs
On accède à la journalisation des événements de l’application via journald :
# systemctl status etherpad.service
# journalctl --unit=etherpad --no-pager