#Etherpad Lite
**Etherpad** est un éditeur de texte collaboratif en temps réel, permettant à plusieurs personnes d’éditer un même document en même temps.
##Installation
On va voir comment l’installer et le rendre disponible rapidement.
Selon les versions utilisées, les différentes étapes peuvent varier
###Étape 1 : Installation des dépendances et préparation du serveur
Mettre d’abord à jour les paquets existants :
```
apt update
apt upgrade
```
Installer ensuite **git**, **mariadb** et **nginx**, qui seront nécessaires au bon fonctionnement d’**etherpad**:
```
apt install git nginx mariadb-server
```
Enfin, installer **Node.js** et **npm**:
```
curl -fsSL https://deb.nodesource.com/setup_20.x | -E bash -
apt install -y nodejs
npm install -g pnpm
```
Pour purger une ancienne version de **Node JS** utiliser les commande suivantes:\\ `rm -rf /usr/local/bin/npm /usr/local/share/man/man1/node* ~/.npm`\\ `rm -rf /usr/local/lib/node*`\\ `rm -rf /usr/local/bin/node*`\\ `rm -rf /usr/local/include/node*`\\ `apt purge nodejs npm`\\ `apt-get purge nodejs npm`\\ `apt autoremove`
Il est également recommandé de créer un utilisateur dédié à l’exécution d’**Etherpad-lite**:
```
useradd -mU etherpad
```
Le serveur est maintenant configuré, on peut passer à la création de la base de données.
###Étape 2 : Préparation de la base de données
**Etherpad-lite** peut fonctionner sans base de données dans sa configuration par défaut. Cela reste cependant destiné à des tests ou à un usage ponctuel. Il est alors préférable d’utiliser une base de données telle que MySQL.
Créer la base de données qui sera utilisée par **Etherpad-lite**. On la nomme ici **db\_etherpad**:
```
mysql
MariaDB [(none)]> CREATE DATABASE db_etherpad;
Query OK, 1 row affected (0.001 sec)
#Créer ensuite l’utilisateur qui se connectera à la base de données et donnez-lui tous les droits sur la DB :
MariaDB [(none)]> GRANT ALL privileges ON db_etherpad.* TO 'etherpad'@'localhost' IDENTIFIED BY 'MotDePasse';
Query OK, 0 rows affected (0.001 sec)
MariaDB [(none)]> FLUSH privileges;
Query OK, 0 rows affected (0.001 sec)
#Quitter MySQL (MariaDB) :
MariaDB [(none)]> \q
Bye
```
La base de données est prête, il ne reste qu’à installer **Etherpad-lite**, et le rendre accessible à l’adresse du serveur.
###Étape 3 : Installation et configuration d’Etherpad-lite dans le dossier de l’utilisateur etherpad
Passer à l’utilisateur **etherpad**:
```
su - etherpad
```
Et se rendre dans le dossier '/opt'
```
cd /opt
```
Récupérer le code d’Etherpad-lite à l’aide de git :
```
git clone https://github.com/ether/etherpad-lite.git
```
Il faut ensuite exécuter le script **run.sh** qui installe les dépendances requises automatiquement. Il faut donc l’exécuter en tant que **root** pour cette première exécution :
```
cd etherpad-lite
npm config set https-proxy http://xx.xx.xxx.xxx:3128
su -c bin/run.sh
```
Quitter à l’aide de Ctrl + C
Changer ensuite l’environnement de **Node.js** pour passer en production :
```
NODE_ENV=production
export NODE_ENV
```
Cette modification peut également être exécuté en une seule commande :
```
export NODE_ENV=production
```
Lors de l’exécution du script **run.sh**, certains fichiers ont été créés et appartiennent à l’utilisateur root. Ces fichiers sont nécessaires au bon fonctionnement d’Etherpad, que l'on va exécuter avec l’utilisateur **etherpad**. Pour cette raison, il est nécessaire de redéfinir la propriété de l’ensemble des fichiers pour l'utilisateur **etherpad** en soit le propriétaire.
Retour à l’utilisateur root :
```
exit
```
Et modification de la propriété :
```
chown -R etherpad:etherpad /home/etherpad/etherpad-lite
```
Retour à l’utilisateur etherpad :
```
su - etherpad
```
Editer le fichier de configuration `settings.json` :
```
vim etherpad-lite/settings.json
```
Pour définir la base de données créée plus tôt, remplacer les lignes suivantes :
```
"dbType": "dirty",
"dbSettings": {
"filename": "var/dirty.db"
},
```
Par :
```
"dbType" : "mysql",
"dbSettings" : {
"user": "etherpad",
"host": "localhost",
"port": 3306,
"password": "MotDePasse",
"database": "db_etherpad",
"charset": "utf8mb4"
},
```
Pour utiliser une base de données sqlite:\\ 1-créer la base de données `sqlite3 etherpad.db` puis `.quit` pour quitter sqlite\\ 2-changer le propriétaire de la base `chown etherpad:etherpad etherpad.db`\\ 3- Dans le fichier de configuration indiquer `"dbType": "sqlite",` puis `"filename": "etherpad.db"`
Toujours dans ce même fichier, changer les identifiants administrateurs, qui seront utiles pour se connecter à l’administration d’Etherpad-lite :
```
"users": {
"admin": {
"password": "SuperMotDePasse",
"is_admin": true
},
},
```
Créer un nouveau fichier `etherpad.service` dans `/etc/systemd/system/` avec comme contenu :
```
[Unit]
Description=etherpad (édition collaborative de documents en temps réel)
After=network.target mariadb.service
Wants=mariadb.service
[Service]
Type=simple
WorkingDirectory=/opt/etherpad-lite
User=etherpad
Group=etherpad
Environment=NODE_ENV=production
ExecStart=/opt/etherpad-lite/bin/run.sh --root
ExecStop=/bin/kill -TERM $MAINPID
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
RestartSec=15
ExecStartPre=/bin/mkdir -p /run/etherpad
ExecStartPre=/bin/chown node:node /run/etherpad
ExecStartPre=/bin/chmod 755 /run/etherpad
PermissionsStartOnly=true
TimeoutStopSec=600
PIDFile=/run/etherpad.pid
[Install]
WantedBy=multi-user.target
```
Exécuter `systemctl daemon-reload` puis `systemctl enable etherpad` pour activer le service au démarrage enfin `systemctl start etherpad` pour démarrer le service.
Si tout est en ordre, **etherpad-lite** va démarrer correctement.
Une instance **etherpad** est maintenant en cours d’exécution et est accessible à l’adresse `http://127.0.0.1:9001`
###Étape 4 : Configuration de Nginx pour assigner l’adresse de votre choix à Etherpad
En tant que root :
```
vi /etc/nginx/sites-available/etherpad.conf
```
Contenu :
```
upstream etherpad {
server localhost:9001;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name _; # set domain name here if using one
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
include /etc/nginx/snippets/ssl.conf;
location / {
proxy_pass http://etherpad;
proxy_buffering off; # attention, cette ligne ne remplace aucun proxy_buffering défini dans un fichier 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 pour afficher l'adresse IP distante réelle dans les logs
proxy_set_header X-Forwarded-Proto $scheme; # pour que EP définisse un indicateur de cookie sécurisé lorsque https est utilisé
proxy_http_version 1.1; # recommandé avec des connexions keepalive
# WebSocket proxying - from https://nginx.org/en/docs/http/websocket.html
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
}
# on est ici dans le contexte http
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
# enforce HTTPS
server {
listen 80;
listen [::]:80;
return 302 https://$host$request_uri; # changer ceci en 301 lorsqu'on utilise un domaine
}
```
Il ne reste plus qu’à activer le site :
```
ln -s /etc/nginx/sites-available/etherpad.conf /etc/nginx/sites-enabled/etherpad.conf
```
Et redémarrer **Nginx**:
```
systemctl restart nginx
```
Si tout s’est bien passé, **Etherpad** est disponible à l’adresse https://pad.ceci.estun.example.com, et on peut accéder à l’interface d’administration à partir de https://pad.ceci.estun.example.com/admin.