Etherpad est un éditeur de texte collaboratif en temps réel, open source, qui permet à plusieurs utilisateurs de travailler simultanément sur le même document depuis leur navigateur. Développé initialement par Google puis repris par la communauté, il est aujourd’hui maintenu sous le nom etherpad-lite et repose sur Node.js. Sa légèreté et sa flexibilité en font une alternative sérieuse aux solutions propriétaires comme Google Docs ou Microsoft Office Online, tout en gardant le contrôle total de vos données.
Contrairement aux suites bureautiques hébergées dans le cloud, Etherpad peut être auto-hébergé sur votre propre infrastructure. Chaque document porte le nom de pad et dispose d’une URL unique. L’historique des modifications est conservé version par version, ce qui facilite la traçabilité des changements. Des plugins officiels et communautaires permettent d’étendre les fonctionnalités : export PDF/ODT, authentification LDAP, intégration Jitsi, etc.
Dans ce guide, nous allons installer et configurer Etherpad v2.x / v3.x sur Debian 12 (Bookworm) ou Ubuntu 24.04 LTS, avec MariaDB comme base de données, un service systemd pour la gestion du processus, et Nginx comme reverse proxy pour l’exposition en HTTPS.
Prérequis
Avant de commencer, assurez-vous de disposer :
- Un serveur Debian 12 ou Ubuntu 24.04 LTS à jour
- Un accès root ou sudo
- Un nom de domaine pointant vers votre serveur (pour la configuration SSL)
- Les ports 80 et 443 ouverts dans votre pare-feu
sudo apt update && sudo apt upgrade -y
Étape 1 — Installation de Node.js 20 LTS
Etherpad nécessite Node.js en version 18 minimum, mais la version 20 LTS est recommandée pour la production. On utilise le dépôt officiel NodeSource :
# Installer les dépendances préalables
sudo apt install -y ca-certificates curl gnupg git gzip build-essential libssl-dev python3
# Ajouter le dépôt NodeSource pour Node.js 20
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
# Installer Node.js
sudo apt install -y nodejs
# Vérifier la version
node --version # doit afficher v20.x.x
npm --version
Installez ensuite pnpm, le gestionnaire de paquets recommandé par Etherpad pour ses meilleures performances :
sudo npm install -g pnpm
Étape 2 — Configuration de MariaDB
Etherpad peut fonctionner avec une base de données SQLite en développement, mais MariaDB est fortement conseillée en production pour la fiabilité et les performances.
# Installer MariaDB
sudo apt install -y mariadb-server
# Sécuriser l'installation
sudo mariadb-secure-installation
Créez ensuite la base de données et l’utilisateur dédié à Etherpad :
sudo mariadb -u root -p
-- Dans le prompt MariaDB :
CREATE DATABASE etherpad_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'etherpad'@'localhost' IDENTIFIED BY 'MotDePasseForT#2024';
GRANT CREATE, ALTER, SELECT, INSERT, UPDATE, DELETE ON etherpad_db.* TO 'etherpad'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Étape 3 — Installation d’Etherpad
On crée d’abord un utilisateur système dédié, sans shell de connexion, pour des raisons de sécurité :
sudo adduser --system --no-create-home --home=/opt/etherpad-lite --group etherpad
On clone ensuite le dépôt officiel dans /opt/etherpad-lite :
cd /opt
sudo git clone --branch master https://github.com/ether/etherpad-lite.git
sudo chown -R etherpad:etherpad /opt/etherpad-lite
Installation des dépendances Node.js du projet :
cd /opt/etherpad-lite
sudo -u etherpad pnpm install --prod
Étape 4 — Configuration de settings.json
Le fichier de configuration principal d’Etherpad est settings.json. On part du fichier d’exemple fourni :
sudo cp /opt/etherpad-lite/settings.json.template /opt/etherpad-lite/settings.json
sudo nano /opt/etherpad-lite/settings.json
Les paramètres essentiels à configurer :
{
"title": "Mon Etherpad",
"favicon": "favicon.ico",
"ip": "127.0.0.1",
"port": 9001,
"dbType": "mysql",
"dbSettings": {
"user": "etherpad",
"host": "127.0.0.1",
"port": 3306,
"password": "MotDePasseForT#2024",
"database": "etherpad_db",
"charset": "utf8mb4"
},
"defaultPadText": "Bienvenue sur ce pad collaboratif !nn",
"requireSession": false,
"editOnly": false,
"minify": true,
"maxAge": 21600,
"abiword": null,
"soffice": null,
"allowUnknownFileEnds": true,
"requireAuthentication": false,
"requireAuthorization": false,
"trustProxy": true,
"users": {
"admin": {
"password": "AdminPassword!",
"is_admin": true
}
}
}
Ajustez les droits sur le fichier de configuration :
sudo chown etherpad:etherpad /opt/etherpad-lite/settings.json
sudo chmod 640 /opt/etherpad-lite/settings.json
Étape 5 — Création du service systemd
On crée un service systemd pour gérer le démarrage automatique d’Etherpad :
sudo nano /etc/systemd/system/etherpad.service
[Unit]
Description=Etherpad - Editeur collaboratif en temps reel
After=network.target mariadb.service
Requires=mariadb.service
[Service]
Type=simple
User=etherpad
Group=etherpad
WorkingDirectory=/opt/etherpad-lite
Environment=NODE_ENV=production
ExecStart=/usr/local/bin/pnpm run prod
Restart=always
RestartSec=5
StandardOutput=journal
StandardError=journal
SyslogIdentifier=etherpad
# Durcissement
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=strict
ReadWritePaths=/opt/etherpad-lite /tmp
[Install]
WantedBy=multi-user.target
Activez et démarrez le service :
sudo systemctl daemon-reload
sudo systemctl enable etherpad
sudo systemctl start etherpad
# Vérifier l'état
sudo systemctl status etherpad
sudo journalctl -u etherpad -f
Etherpad est maintenant accessible sur http://127.0.0.1:9001. Mais il faut configurer un reverse proxy pour l’exposer proprement.
Étape 6 — Configuration de Nginx en reverse proxy
Nginx va gérer le chiffrement SSL et transférer les requêtes vers Etherpad. Ce point est particulièrement important pour les connexions WebSocket utilisées par Etherpad pour la synchronisation en temps réel.
sudo apt install -y nginx certbot python3-certbot-nginx
Créez la configuration Nginx :
sudo nano /etc/nginx/sites-available/etherpad.conf
server {
listen 80;
server_name pad.exemple.com;
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl;
server_name pad.exemple.com;
ssl_certificate /etc/letsencrypt/live/pad.exemple.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/pad.exemple.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
access_log /var/log/nginx/etherpad_access.log;
error_log /var/log/nginx/etherpad_error.log;
location / {
proxy_pass http://127.0.0.1:9001;
proxy_http_version 1.1;
# Support WebSocket (essentiel pour Etherpad)
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_buffering off;
proxy_read_timeout 86400;
}
}
# Activer le vhost
sudo ln -s /etc/nginx/sites-available/etherpad.conf /etc/nginx/sites-enabled/
# Obtenir le certificat SSL Let's Encrypt
sudo certbot --nginx -d pad.exemple.com
# Vérifier et recharger Nginx
sudo nginx -t && sudo systemctl reload nginx
Étape 7 — Sécurisation complémentaire
Pour renforcer la sécurité de votre instance Etherpad, configurez le pare-feu pour n’exposer que les ports nécessaires :
# Avec ufw (simplifié)
sudo apt install -y ufw
sudo ufw allow 22/tcp # SSH
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS
sudo ufw deny 9001/tcp # Bloquer l'accès direct au port Etherpad
sudo ufw enable
Activez l’authentification dans settings.json si vous souhaitez restreindre l’accès. Pour des besoins avancés (LDAP, SSO), des plugins dédiés sont disponibles via l’interface d’administration accessible sur /admin.
Étape 8 — Installation de plugins via l’interface admin
Etherpad dispose d’une interface d’administration accessible à l’adresse https://pad.exemple.com/admin (avec le mot de passe défini dans settings.json). Depuis cette interface, vous pouvez :
- Installer des plugins :
ep_markdown,ep_table_of_contents,ep_spell_check - Gérer les pads existants
- Superviser les utilisateurs connectés
- Modifier la configuration à chaud
Pour installer un plugin en ligne de commande :
cd /opt/etherpad-lite
sudo -u etherpad pnpm install ep_markdown
sudo systemctl restart etherpad
À lire également
- Gestion des services avec systemd sur Debian et Ubuntu
- Fail2ban — configuration avancée et filtres personnalisés
- nftables en pratique — remplacer iptables sur Debian/Ubuntu
- Docker sur Debian/Ubuntu : Installation, Configuration et Utilisation