--- categories: web webapp title: Howto Etherpad ... * Documentation : * Code : * Licence : Apache-2.0 * Langage : Javascript * Ansible : à venir [Etherpad](https://github.com/ether/etherpad-lite) est une application web de rédaction collaborative en temps réel développée en node.js. ## Installation Nous installons la version **1.8.18** sous **Debian 11 (Bullseye)** en mode manuel. (Il y a aussi un mode d'installation pour [Docker](https://github.com/ether/etherpad-lite/blob/develop/doc/docker.md).) Etherpad s'appuie sur [NodeJS](HowtoNodeJS) et peut être configurée avec différents SGBD ([MariaDB/MySQL](HowtoMySQL), PostgreSQL, SQLite) et proxy web ([Nginx](HowtoNginx), Apache, HAProxy, Varnish, etc). Dans la présente documentation, nous montrons comment faire avec MariaDB et Nginx. On installe les dépendances de la manière suivante : ~~~ # apt install apt-transport-https mariadb-server nginx git wget # echo "deb https://deb.nodesource.com/node_18.x $(awk -F= '/VERSION_CODENAME/{print $2}' /etc/os-release) main" > /etc/apt/sources.list.d/nodesource.list # wget https://deb.nodesource.com/gpgkey/nodesource.gpg.key -O /etc/apt/trusted.gpg.d/nodesource.asc # chmod 644 /etc/apt/trusted.gpg.d/nodesource.asc # apt update && apt install nodejs ~~~ ### 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 'Un-vrai-mot-de-passe'; ~~~ > **Note** : Pensez à conserver le mot de passe pour la suite. ### Etherpad On clone le dépôt et on bâtit l'application : ~~~ # sudo -iu etherpad $ git clone https://github.com/ether/etherpad-lite.git $ cd etherpad-lite/ $ git checkout 1.8.18 $ 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 + C` sur 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", "port": "/run/mysqld/mysqld.sock", "password": "Un-vrai-mot-de-passe", "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/v1.8.18/ After=network.target After=mariadb.service [Service] Type=simple Environment=NODE_ENV=production ExecStart=/usr/bin/node --experimental-worker /home/etherpad/etherpad-lite/node_modules/ep_etherpad-lite/node/server.js 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.evolix.org; # 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.evolix.org; ssl_certificate /etc/letsencrypt/live/etherpad.evolix.org/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/etherpad.evolix.org/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](HowtoLetsEncrypt) 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 ~~~ ## Mises à jour Les mises à jour peuvent être récupérées comme ceci : ~~~ # systemctl stop etherpad.service # sudo -iu etherpad $ cd etherpad-lite $ git fetch origin && git checkout $ src/bin/run.sh $ (Ctrl + C) $ exit # systemctl start etherpad.service ~~~ > **Note** : Ces commandes ne sont parfois pas suffisantes. Vous devez systématiquement lire les [notes de versions](https://github.com/ether/etherpad-lite/releases). ## Configuration Etherpad est configurable via le fichier `settings.json` ou des variables d'environnement. Il y a +200 [plugins](https://static.etherpad.org/) disponibles, dont environ 80 sont officiels. ## Utilisation de l'API Son accès se fait via 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 où `monsuperpad` est le padID. ~~~ $ curl -XGET "https://pad.evolix.org/api/1.2.15/deletePad?apikey=${APIKEY}&padID=monsuperpad" ~~~ ### Lister les pad ~~~ $ curl -s -XGET "https://pad.evolix.org/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 ~~~