Login Logout

Howto Etherpad

Etherpad 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.)

Etherpad s’appuie sur NodeJS 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.

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 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 <NOUV_VERSION>
$ 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.

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.evolix.org/api/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.evolix.org/p/monsuperpadmonsuperpad 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