Comment installer l’éditeur Web collaboratif Etherpad sur Rocky Linux 8

Etherpad est un éditeur en ligne open-source offrant une édition collaborative en temps réel dans le navigateur. Il est écrit en Node.js et peut être auto-hébergé pour fonctionner avec diverses plateformes comme WordPress, Drupal, Odoo, Discourse, Joomla, etc.

Dans ce tutoriel, nous allons installer Etherpad sur un serveur Rocky Linux 8, en utilisant la base de données MariaDB pour stocker nos données. Nous utiliserons également Nginx comme proxy inverse pour l’application et installerons un certificat SSL à l’aide de Let’s Encrypt pour permettre les connexions HTTPS à notre instance Etherpad.

Conditions préalables

  1. Un système exécutant Rocky Linux 8.

  2. Un utilisateur non-root avec des privilèges sudo.

  3. Un nom de domaine pointé vers le serveur.

  4. Nodejs installé. Suis notre guide d’installation de Nodejs sur le serveur Rocky Linux 8. Utilise l’une des deux méthodes indiquées.

  5. Assure-toi que tout est mis à jour.

    $ sudo dnf update
    

Étape 1 – Configurer le pare-feu

Rocky Linux utilise le pare-feu Firewalld. Vérifie le statut du pare-feu.

$ sudo firewall-cmd --state
running

Cela indique qu’il est en place et fonctionne avec succès.

Le pare-feu fonctionne avec différentes zones et la zone publique est la zone par défaut, que nous utiliserons. Répertorie tous les services et ports actifs sur le pare-feu.

$ sudo firewall-cmd --permanent --list-services

Il devrait afficher la sortie suivante.

cockpit dhcpv6-client ssh

Autorise les ports HTTP et HTTPS.

$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https

Ouvre le port 9001 utilisé par l’application Etherpad.

$ sudo firewall-cmd --permanent --add-port=9001/tcp

Vérifie à nouveau l’état du pare-feu.

$ sudo firewall-cmd --permanent --list-services

Tu devrais voir une sortie similaire.

cockpit dhcpv6-client http https ssh

Recharge le pare-feu pour activer les modifications.

$ sudo firewall-cmd --reload

Étape 2 – Installe Git

Avant d’installer Etherpad, nous devons installer Git. Exécute la commande suivante pour installer Git.

$ sudo dnf install git

Vérifie l’installation.

$ git --version
git version 2.27.0

Ajoute la configuration initiale.

$ git config --global user.name "YourName"
$ git config --global user.email "[email protected]"

Affiche la configuration que tu viens de définir.

$ git config --list
user.name=YourName
[email protected]

Étape 3 – Installer MariaDB

Comme nous allons utiliser la base de données MariaDB pour stocker les données d’Etherpad, nous devons d’abord l’installer et la configurer.

Le dépôt Rocky Linux AppStream est livré avec MariaDB. Pour répertorier toutes les versions disponibles de MariaDB installées, exécute la commande suivante.

$ sudo dnf module list mariadb
Last metadata expiration check: 1:15:26 ago on Thu 21 Oct 2021 10:20:01 AM UTC.
Rocky Linux 8 - AppStream
Name                          Stream                         Profiles                                         Summary
mariadb                       10.3 [d]                       client, galera, server [d]                       MariaDB Module
mariadb                       10.5                           client, galera, server [d]                       MariaDB Module

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled

La version par défaut est définie sur 10.3. Tu peux toutefois installer la dernière version à l’aide de la commande suivante.

$ sudo dnf module enable mariadb:10.5

Installe MariaDB.

$ sudo dnf install mariadb-server

Active et démarre le service MariaDB.

$ sudo systemctl enable mariadb --now

Vérifie l’état du service.

$ sudo systemctl status mariadb

Sécurise le serveur MariaDB.

$ sudo mysql_secure_installation

Tu seras confronté à plusieurs invites. Réponds-leur comme suit.

Enter current password for root (enter for none): Press Enter
Switch to unix_socket authentication [Y/n] Type y
Change the root password? [Y/n] Type n
Remove anonymous users? [Y/n] Type y
Disallow root login remotely? [Y/n] Type y
Remove test database and access to it? [Y/n] Type y
Reload privilege tables now? [Y/n] Type y

Tu peux maintenant te connecter au serveur MariaDB à l’aide de la commande suivante.

$ sudo mysql 

Étape 4 – Configurer MariaDB

Connecte-toi au shell MariaDB.

$ sudo mysql

Crée une nouvelle base de données pour Etherpad.

$ create database `etherpad_lite_db`;

Crée un nouvel utilisateur de la base de données.

$ CREATE USER 'etherpaduser'@'localhost' identified by 'password';

Utilise un mot de passe fort.

Accorde des permissions sur la base de données à l’utilisateur.

$ grant CREATE,ALTER,SELECT,INSERT,UPDATE,DELETE on `etherpad_lite_db`.* to '<etherpaduser>'@'localhost';

Quitte le shell MySQL.

$ exit

Étape 5 – Télécharge et installe Etherpad

Pour installer Etherpad, nous allons télécharger son code source et le construire.

La première étape consiste à créer un nouvel utilisateur etherpad à l’aide de la commande suivante.

$ sudo adduser --system --home /opt/etherpad --create-home --user-group etherpad

Cette commande crée un utilisateur --system, ce qui signifie qu’il ne peut pas se connecter et n’a pas de mot de passe. Nous lui donnons également un répertoire personnel /opt/etherpad qui est l’endroit où nous allons télécharger Etherpad. L’indicateur --create-home crée le répertoire personnel avec les autorisations correctes. Le drapeau --user-group crée un groupe avec le même nom que le nom d’utilisateur.

Passe à l’utilisateur etherpad pour télécharger et installer l’application.

$ sudo -u etherpad bash

Passe dans le répertoire /opt/etherpad.

[[email protected] user] cd /opt/etherpad

Clone le référentiel Etherpad dans le répertoire /opt/etherpad.

[[email protected] ~]$ git clone --branch master git://github.com/ether/etherpad-lite.git

Passe dans le répertoire nouvellement téléchargé.

[[email protected] ~]$ cd etherpad-lite

Exécute le script run.sh d’Etherpad pour configurer et installer les dépendances.

[[email protected] etherpad-lite]$ src/bin/run.sh

Tu peux lancer l’URL http://YOURSERVERIP:9001 dans le navigateur pour lancer Etherpad. Tu obtiendras l’écran suivant.

Accueil Etherpad

Il y a un problème avec l’installation ci-dessus. Elle t’oblige à garder le shell actuel ouvert avec Node en cours d’exécution au premier plan. Pour en faire une installation persistante, nous devons exécuter Etherpad en tant que service. Appuie sur Ctrl + C sur ton terminal pour arrêter l’exécution d’Etherpad.

Étape 6 – Configurer Etherpad

Avant d’aller plus loin, nous devons définir certains paramètres et configurer notre installation en fonction de nos besoins. Etherpad enregistre ses paramètres dans le fichier settings.json dans le répertoire d’installation.

Ouvre le fichier pour le modifier.

[[email protected] etherpad-lite]$ nano settings.json

Le fichier de paramètres est formaté en JSON. La première chose que tu dois configurer, ce sont les paramètres de la base de données.

Trouve le code suivant et commente-le en mettant // devant.

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

Ensuite, trouve le code suivant et modifie ses valeurs comme suit. Veille à supprimer /* et */ au début et à la fin.

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

Enfin, fais défiler un peu vers le bas pour trouver le paramètre trustProxy et change sa valeur de false à true.

  "trustProxy": true,

Ce paramètre est nécessaire pour qu’Etherpad fonctionne avec Nginx.

Sauvegarde le fichier en appuyant sur Ctrl + X et en entrant Y à l’invite une fois terminé.

Quitte le shell de l’utilisateur Etherpad.

[[email protected] etherpad-lite]$ exit

Étape 7 – Créer le service Etherpad

Pour démarrer Etherpad au démarrage et gérer le processus à l’aide de systemctl, nous devons créer un fichier de service.

Crée et ouvre le fichier de service.

$ sudo nano /etc/systemd/system/etherpad.service

Colle le code suivant dans celui-ci.

[Unit]
Description=Etherpad, a collaborative web editor.
After=syslog.target network.target

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

[Install]
WantedBy=multi-user.target

Sauvegarde le fichier en appuyant sur Ctrl + X et en entrant Y lorsque tu y es invité une fois terminé.

Recharge le démon de service pour intégrer la nouvelle configuration.

$ sudo systemctl daemon-reload

Activer Démarrer le service Etherpad.

$ sudo systemctl enable etherpad --now

Vérifie l’état du service.

$ sudo systemctl status etherpad
? etherpad.service - Etherpad, a collaborative web editor.
   Loaded: loaded (/etc/systemd/system/etherpad.service; disabled; vendor preset: disabled)
   Active: active (running) since Thu 2021-10-21 15:06:53 UTC; 6s ago
 Main PID: 47228 (node)
    Tasks: 13 (limit: 11411)
   Memory: 102.8M
   CGroup: /system.slice/etherpad.service
           ??47228 /usr/bin/node --experimental-worker /opt/etherpad/etherpad-lite/node_modules/ep_etherpad-lite/node/server.js
.......

Étape 8 – Installer SSL à l’aide de Let’s Encrypt

Pour installer un certificat SSL à l’aide de Let’s Encrypt, nous devons installer l’outil Certbot.

Tout d’abord, tu dois télécharger et installer le référentiel EPEL.

$ sudo dnf install epel-release

Exécute les commandes suivantes pour installer Certbot.

$ sudo dnf install certbot

Génère le certificat SSL.

$ sudo certbot certonly --standalone --agree-tos --preferred-challenges http -m [email protected] -d example.com

La commande ci-dessus téléchargera un certificat dans le répertoire /etc/letsencrypt/live/etherpad.example.com de ton serveur.

Génère un certificat de groupe Diffie-Hellman.

$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Crée un répertoire webroot de défi pour le renouvellement automatique de Let’s Encrypt.

$ sudo mkdir -p /var/lib/letsencrypt

Crée une tâche Cron pour renouveler le SSL. Elle s’exécutera tous les jours pour vérifier le certificat et le renouveler si nécessaire. Pour cela, commence par créer le fichier /etc/cron.daily/certbot-renew et ouvre-le pour le modifier.

$ sudo nano /etc/cron.daily/certbot-renew

Colle le code suivant.

#!/bin/sh
certbot renew --cert-name etherpad.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"

Enregistre le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque tu y es invité.

Change les autorisations sur le fichier de tâches pour le rendre exécutable.

$ sudo chmod +x /etc/cron.daily/certbot-renew

Étape 9 – Installe et configure Nginx

Rocky Linux est livré avec une ancienne version de Nginx. Pour installer la dernière version, tu dois ajouter le référentiel Nginx.

Crée et ouvre le fichier /etc/yum.repos.d/nginx.repo pour le modifier.

$ sudo nano /etc/yum.repos.d/nginx.repo

Colle le code suivant dans ce fichier.

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

Enregistre le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque tu y es invité une fois terminé.

Installe Nginx.

$ sudo dnf install nginx

Active le service Nginx.

$ sudo systemctl enable nginx

Ensuite, crée et ouvre le site /etc/nginx/conf.d/etherpad.conf pour le modifier.

$ sudo nano /etc/nginx/conf.d/etherpad.conf

Colle le code suivant dans celui-ci.

server {
    listen       443 ssl http2;
    listen       [::]:443 ssl http2;
    server_name  etherpad.example.com;

    access_log  /var/log/nginx/etherpad.access.log;
    error_log   /var/log/nginx/etherpad.error.log;
    
    ssl_certificate      /etc/letsencrypt/live/etherpad.example.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/etherpad.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/etherpad.example.com/chain.pem;

    ssl_session_timeout  5m;
    ssl_session_cache shared:MozSSL:10m;  # about 40000 sessions
    ssl_session_tickets off;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;

    location / {
        rewrite  ^/$ / break;
        rewrite  ^/locales/(.*) /locales/$1 break;
        rewrite  ^/locales.json /locales.json break;
        rewrite  ^/admin(.*) /admin/$1 break;
        rewrite  ^/p/(.*) /p/$1 break;
        rewrite  ^/static/(.*) /static/$1 break;
        rewrite  ^/pluginfw/(.*) /pluginfw/$1 break;
        rewrite  ^/javascripts/(.*) /javascripts/$1 break;
        rewrite  ^/socket.io/(.*) /socket.io/$1 break;
        rewrite  ^/ep/(.*) /ep/$1 break;
        rewrite  ^/minified/(.*) /minified/$1 break;
        rewrite  ^/api/(.*) /api/$1 break;
        rewrite  ^/ro/(.*) /ro/$1 break;
        rewrite  ^/error/(.*) /error/$1 break;
        rewrite  ^/jserror(.*) /jserror$1 break;
        rewrite  ^/redirect(.*) /redirect$1 break;
        rewrite  /favicon.ico /favicon.ico break;
        rewrite  /robots.txt /robots.txt break;
        rewrite  /(.*) /p/$1;
        
        proxy_pass         http://127.0.0.1:9001;
        proxy_buffering    off;
        proxy_set_header   Host $host;
        proxy_pass_header  Server;

        # proxy headers
        proxy_set_header    X-Real-IP $remote_addr;
        proxy_set_header    X-Forwarded-For $remote_addr;
        proxy_set_header    X-Forwarded-Proto $scheme;
        proxy_http_version  1.1;

        # websocket proxying
        proxy_set_header  Upgrade $http_upgrade;
        proxy_set_header  Connection $connection_upgrade;
    }
}

# we're in the http context here
map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}

# enforce HTTPS
server {
    listen       80;
    listen       [::]:80;
    server_name  etherpad.example.com;
    return 301   https://$host$request_uri;
}

Enregistre le fichier en appuyant sur Ctrl + X et en entrant Y lorsque tu y es invité une fois terminé.

Vérifie la syntaxe du fichier de configuration de Nginx.

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Si tu obtiens l’erreur suivante, tu devras modifier le fichier /etc/nginx/nginx.conf pour ajouter/ajuster la taille de la variable server_names_hash_bucket_size.

nginx: [emerg] could not build the server_names_hash, you should increase server_names_hash_bucket_size

Ouvre le fichier /etc/nginx/nginx.conf pour le modifier.

$ sudo nano /etc/nginx/nginx.conf

Ajoute la ligne suivante avant la ligne include /etc/nginx/conf.d/*.conf;.

server_names_hash_bucket_size  64;

Enregistre le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque tu y es invité. Valide à nouveau Nginx.

Enfin, démarre le service Nginx pour activer la nouvelle configuration.

$ sudo systemctl start nginx

Lance l'URL https://etherpad.example.com dans ton navigateur et la maison Etherpad s'ouvrira. Tu peux maintenant l'utiliser pour modifier des documents et inviter des collaborateurs.

Mise à jour d'Etherpad

La mise à jour d'Etherpad est facile. La première étape consiste à passer au shell de l'utilisateur d'Etherpad.

$ sudo -u etherpad bash

Passe dans le répertoire /opt/etherpad/etherpad-lite.

[[email protected] user] cd /opt/etherpad/etherpad-lite

Tire le dernier référentiel Etherpad dans le répertoire /opt/etherpad/etherpad-lite.

[[email protected] ~]$ git pull origin

Exécute le script run.sh d'Etherpad pour configurer la dernière version d'Etherpad.

[[email protected] etherpad-lite]$ src/bin/run.sh

Conclusion

Dans ce tutoriel, nous avons installé l'éditeur collaboratif Etherpad avec le serveur Nginx et sécurisé à l'aide des certificats SSL de Let's Encrypt. Ton installation d'Etherpad est prête à être utilisée et tu peux l'étendre avec d'autres fonctionnalités, notamment des utilisateurs authentifiés, des plugins et des personnalisations de l'interface utilisateur.

Si tu as des questions, poste-les dans les commentaires ci-dessous.

Vous aimerez aussi...