Installation d'Etherpad-lite sur un serveur Nginx

Installation d'Etherpad-lite sur un serveur Nginx

Quelques informations

Etherpad lite.

Source officielle : https://github.com/ether/etherpad-lite

Tuto souvent en anglais, voir incomplet.
Par exemple : https://www.howtoforge.com/how-to-install-etherpad-on-debian-11/#installing-packages-dependencies

Ici, beaucoup de traduction.

Pré-requis

Le matériel utilisé pour notre installation est un VPS chez OVH : 1vcore / 2Go ram / 40 Go SSD.

  • Debian serveur 11
  • un nom de domaine pour l'installation qui pointe vers l'adresse IP de votre serveur. Exemple : "pad.exemple.org"

Installation des dépendances

  1. actualiser la liste des paquets et installer les dépendances
sudo apt update
sudo apt install gzip git curl python libssl-dev pkg-config gcc g++ make build-essential -y
  1. Installer Node.js > 16.x

Ajouter le dépôt à votre liste de paquet, puis rafraichir la liste des paquets :

curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash -
  1. Installer Node.js depuis le nouveau repoeroire :

    sudo apt install nodejs -y
  2. Vérifier que vous avez la bonne version de Node.js :

    node --version

Installer et configurer une base de donnée MariaDB

  1. Par défaut, les paques MariaDB sont présent dans les répertoires de Debian 11.

L'installer avec cette commande :

sudo apt install mariadb-server -y
  1. Prendre en main MariaDB en ligne de commande

MariaDB est activée. Nous devons désormais sécuriser la sécuriser :

mysql_secure_installation
  1. Répondez aux questions

  2. Accepter d'utiliser unix_socket comme méthode d'authentification :

Switch to unix_socket authentication [Y/n] Y
Enabled successfully!
Reloading privilege tables..
 ... Success!
  1. Changer le root password pour sécuriser MariaDB :
Change the root password? [Y/n] Y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
 ... Success!
  1. Supprimer les utilisateurs anonymes :
Remove anonymous users? [Y/n] Y
 ... Success!
  1. Désactiver la connection à distance avec l'utilisateur root :
Disallow root login remotely? [Y/n] Y
 ... Success!
  1. Accepter de supprimer la base de données par défaut "test" et tous ses privilèges :

    Remove test database and access to it? [Y/n] Y
    - Dropping test database...
    ... Success!
    - Removing privileges on test database...
    ... Success!
  2. recharger le tableau des privilèges et appliquer la nouvelle configuration :

Reload privilege tables now? [Y/n] Y
 ... Success!

Et vous avez fini l'installation de MariaDB et de sa sécurisation :

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!
  1. Identifié vous en lançant MariaDB en ligne de commande avec l'utilisateur root et son mot de passe :
mysql -u root -p
  1. Créez une base de données et un utilisateur pour Etherpad.
    Cette exemple va créer la base "etherpad_lite_db" avec l'utilisateur "etherpaduser" et le mot de passe "TresFortMotDePasse" que vous devez impérativement modifier :
CREATE DATABASE etherpad_lite_db;
CREATE USER etherpaduser@localhost IDENTIFIED BY 'TrèsFortMotDePasse';
GRANT CREATE,ALTER,SELECT,INSERT,UPDATE,DELETE on etherpad_lite_db.* to etherpaduser@localhost;
  1. Rercharger la liste des privilèges, appliquer la nouvelle configuration et déconnectez-vous de la commande de MariaDB :
FLUSH PRIVILEGES;
EXIT

Installer et configurer Etherpad

Nous allons installé Etherpad depuis les codes sources, le configuer avec la base de données MariaDB, puis lancer Etherpad comme un service systemd.

  1. Créer un nouvel utilisateur "etherpad" pour lancer le script d'installation d'Etherpad et lancer le service Etherpad.
sudo adduser --system --no-create-home --home=/opt/etherpad-lite --group etherpad
  1. Aller dans le répertoire "/opt" et copier les sources d'Etherpad en utilisant git :

    cd /opt/
    git clone --branch master https://github.com/ether/etherpad-lite.git
  2. Changer le propriétaire du répertoire d'etherpad-lite en utilisateur "etherpad" avec le group "etherpard".

sudo chown -R etherpad:etherpad etherpad-lite
  1. Now navigate to the directory 'etherpad-lite/' and install all Node.js dependencies using the installer script 'installDeps.sh' as below. The installer script 'installDeps.sh' will be running as a non-root user 'etherpad'.
cd /opt/etherpad-lite
sudo su -s /bin/bash -c "./bin/installDeps.sh" etherpad
  1. Modifier le fichier "setting.json" avec l'éditeur nano :
sudo nano settings.json

Changer le titre d'Etherpad avec votre propre titre .

"title": "Votre titre",

nous allons faire tourner ici Etherpad avec le reverse proxy de Nginx. Pour plus de sécurité, nous allons faire tourner Etherpad sur sur l'hôte local (localhost).
Changer l'adresse "ip" par "127.0.0.1" :

 "ip": "127.0.0.1",
  "port": 9001, 

Par défaut Etherpad utilise la base de données SQLite.
Commenter ces lignes...

"dbType": "dirty",
"dbSettings": {
  "filename": "var/dirty.db"
},

...afin d'obtenir ceci :

  /*
  *"dbType": "dirty",
  *"dbSettings": {
  *  "filename": "var/dirty.db"
  *},
  */

Configurer les paramètre de votre base de données MariaDB. Remplasser la configuration par le nom de la base de donnée, l'utilisateur et votre mot de passe que nous avons défini plus haut :

  "dbType" : "mysql",
  "dbSettings" : {
    "user":     "etherpaduser",
    "host":     "localhost",
    "port":     3306,
    "password": "TrèsFortMotDePasse",
    "database": "etherpad_lite_db",
    "charset":  "utf8mb4"
  },

Sauver, quitter.

  1. Créer un nouveau fichier de service systemd "etherpad.service" dans le répertoire "/etc/systemd/system". Ce fichier contient tous les détails de configuration que vous avez besoins. Créer le en utilisant (ici) Nano.
    sudo nano /etc/systemd/system/etherpad.service

    Ajouter ces configuration dans le fichier :

    
    [Unit]
    Description=Etherpad-lite, the collaborative editor.
    After=syslog.target network.target

[Service]
Type=simple
User=etherpad
Group=etherpad
WorkingDirectory=/opt/etherpad-lite
Environment=NODE_ENV=production
ExecStart=/usr/bin/node --experimental-worker /opt/etherpad-lite/node_modules/ep_etherpad-lite/node/server.js

use mysql plus a complete settings.json to avoid Service hold-off time over, scheduling restart.

Restart=always

[Install]
WantedBy=multi-user.target

This service file will be running as a user and group 'etherpad'. And you'll notice the option 'Environment=NODE_ENV=production', which means the Etherpad application will be running on the production environment. The 'ExecStart=..' option is the default command to run the Etherpad application. 

Sauver et quitter l'édition du fichier.

Recharger le gestionnaire du systemd  pour appliquer les nouvelles configuration :

sudo systemctl daemon-reload


Activer le service d'Etherpad et vérifier qu'il tourne :

sudo systemctl enable --now etherpad
sudo systemctl status etherpad

Le service doit être actif, avec la mention "Active:  active (running)". Il se lancera automatiquement au chargement du système, et se lancera sur l'hote local (localhost) avec le port "9001".

L'installation d'Etherpad est fini.

# Installer et configuer Nginx.

nous allons faire tourner ici Etherpad avec le [reverse proxy de Nginx](https://www.it-connect.fr/configurer-nginx-en-tant-que-reverse-proxy/ ).

1. Installer les paquets de Nginx :

sudo apt install nginx -y


2. Installer et configurer un Firewall

!!!! A FAIRE !!!!!!

Now, if you have got the UFW firewall on your Debian system. Allow public access to the HTTP and HTTPS ports (80 and 443) by running the 'ufw' command below.

sudo ufw allow "Nginx Full"

-->  on obtient :

Rule added
Rule added (v6)


3. Créer [un certifat SSL avec Let's encrypt](https://www.nginx.com/blog/using-free-ssltls-certificates-from-lets-encrypt-with-nginx/) :

Installer le client Let's Encrypt, _Cerbot_ :

sudo apt-get install certbot python3-certbot-nginx -y


Demander un certificat SSL, en remplaçant "pad.exemple.org" par votre domaine :

sudo certbot --nginx -d pad.exemple.org

Remplisser si vous le souhaitez les informations demandées, ntoamment une adresse mail si vous souhaitez être informé des problèmes de renouvellement de votre certificat.

Pour plus d'information : https://www.it-connect.fr/nginx-ajouter-un-certificat-ssl-lets-encrypt-pour-passer-en-https/

4. Créer un fichier de configuration de l'hote virtuel Nginx (_virtual host_ ou _vhost_) "etherpad", ici avec _Nano_ :

sudo nano /etc/nginx/sites-available/pad.exemple.org

Modifier le fichier de configuration à partir de cet exemple, en vérifiant que le chemin d'accès à vos certificats sont les bons, et en modifiant "pad.exemple.com" par vos propres informations.
Dans ce cas le traffic http va automatiquement être redirigé vers le protocol sécurisé https.

GNU nano 5.4 etherpad
server {
listen 80;
listen [::]:80;
server_name pad.exemple.fr;
return 301 https://$host$request_uri;
}

we're in the http context here

map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}

server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name pad.mailodie.fr;

access_log  /var/log/nginx/eplite.access.log;
error_log   /var/log/nginx/eplite.error.log;

ssl_certificate      /etc/letsencrypt/live/pad.exemple.org/fullchain.pem;
ssl_certificate_key  /etc/letsencrypt/live/pad.exemple.org/privkey.pem;

ssl_session_timeout  5m;

ssl_protocols TLSv1.2;
    ssl_prefer_server_ciphers on;

ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRS>

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/fil>
    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;
}

}


5. Quitter et enregistrer le fichier.
Le sous-répertoire « sites-available » stocke les vhosts mais pour que Nginx les prenne en considération, vous devez les activer en créant un lien symbolique dans « /etc/nginx/sites-enabled ».
Activer la configuration de l'hôte virtuel en créant un lien symbolique du fichier "pad.exemple.org" vers le répertoire "/etc/nginx/sites-enabled" :

sudo ln -s /etc/nginx/sites-available/pad.exemple.org /etc/nginx/sites-enabled/


6. Lancer la commande "nginx -t" pour vérifier la syntax de votre fichier de configuration :

sudo nginx -t


Si tout va bien, vous devez avoir ceci : 

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful.


7. Redémarrer Nginx pour prendre en compte le fichier de configuration de l'hôte virtuel :

sudo systemctl restart nginx


# Paramétrer Etherpad

Si tout va bien, votre Etherpad est opérationnel, accessible à l'adresse défini pad.exemple.org.

Vous pouvez le configurer plus finement avec nano dans le fichier /opt/etherpad-lite/settings.json :

sudo nano /opt/etherpad-lite/settings.json



1. configurer le compte admin pour activer la page https://pad.exemple.org/admin

2. Activer les plugins souhaités.

([avec nano, le raccourci est ALT +3](https://debian-facile.org/doc:editeurs:nano))

Notes