# Introduction Documentation à destination d'un administrateur de service pad de Chalec. L'objectif est d'installer un service basé sur le logiciel Etherpad-lite Il sera placé en amont, un service nginx qui gèrera le traffic TLS et ses certificats. # Base de données (BDD) Installer la base de données PostgreSQL et démarrer le service associé : ``` # apt install postgresql postgresql-client # systemctl enable --now postgresql ``` On vérifie que l'on peut se connecter en IP avec vérification du mot de passe par la BDD. Éditer le fichier `/etc/postgresql/13/main/pg_hba.conf` : ``` host all all 127.0.0.0/24 md5 ``` Créer l'utilisateur et la base : ``` # su - postgres $ createuser pad $ createdb pad -O pad $ psql pad ALTER USER pad WITH PASSWORD '' ; ALTER ROLE; \q ``` # Installer Etherpad Créer l'utilisateur d'Etherpad : ``` # adduser etherpad ``` Connecter avec l'utilisateur etherpad : ``` # su - etherpad ``` Suivre les recommandations de la documentation officielle d'Etherpad pour installer sur Debian : ``` $ cd /home/etherpad $ curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash - # apt install -y nodejs $ git clone --branch master https://github.com/ether/etherpad-lite.git ``` # Récupérer les ressoures du pad Chalec Cloner le dépot Pad de Chalec avec l'utilisateur etherpad : ``` $ git clone https://git.a-lec.org/a-lec/commissions/chalec/pad ``` # Configuration Etherpad Le fichier `/home/etherpad/pad.git/conf/etherpad-lite/settings.json` contient toute la configuration requise. Pour une mise en place rapide, vous pouvez remplacer votre fichier settings.json par celui-ci. Il faudra néanmoins mettre en place les secrets décrits ci-dessous. Dans le cas contraire, si vous souhaitez conserver votre fichier initial, veuillez suivre pas à pas cette section. Les instructions suivantes s'appliquent au fichier `/home/etherpad/etherpad-lite/settings.json` : ``` $ cd /homer/etherpad/etherpad-lite ``` Commenter ou supprimer la BDD par défaut : ``` /* "dbType": "dirty", "dbSettings": { "filename": "var/dirty.db" }, */ ``` Décommenter la section `postgres` et compléter avec les secrets : ``` "dbType" : "postgres", "dbSettings" : { "user": "pad", "host": "localhost", "port": 5432, "password": "", "database": "pad", "charset": "utf8mb4" }, ``` Indiquer à l'instance qu'elle tourne derrière un proxy et donc que la communication est sécurisée même si elle dialogue en HTTP, sans TLS : ``` "trustProxy": true, ``` Configurer l'accès admin web : ``` "users": { "admin666": { "password": "", "is_admin": true }, }, ``` Pour la réalisation des tests et la mise en place du pad, il est fortement conseillé de régler le paramètre "minify" à false. Dans le cas contraire, le temps de chargement du premier pad peut-être très long. Penser à reactiver ce paramètre si besoin pour réduire le traffic web. ``` "minify": false, ``` Personnaliser le titre : ``` "title": "Pad Chalec", ``` Placer la favicon dans le dossier `/home/etherpad` et la référencer : ``` "favicon": "../pad.chalec.org.svg", ``` Ajouter le skin Chalec qui est basé sur le skin par défaut : ``` $ cd /home/etherpad/etherpad-lite/ $ cp -r conf/etherpad-lite/skins/chalec src/static/skins ``` et l'activer dans la configuration : ``` "skinName": "chalec", ``` Personnaliser le texte par défaut de la page d'un nouveau pad : ``` "defaultPadText" : " <---- Tapez votre texte ici et libre à vous d'effacer cette \ page d'informations.\n\nBienvenue sur pad.chalec.org, un service Chalec, basé sur le \ logiciel libre Etherpad-lite !\n\nNous vous souhaitons une agréable navigation ainsi \ que de partager les valeurs du libre ici ou ailleurs.\n\nQuelques conseils : \n- cons\ ervez pour vous-même l'adresse (URL) de ce pad et communiquez-la à vos collaborateurs\ . Le contenu est synchronisé entre participants ;\n- attention, tout est public ! Mai\ s sans adresse (URL) point d'accès. Ne la partagez pas avec n'importe qui ;\n- choisi\ ssez un pseudonyme et une couleur (bouton en haut à droite) afin que les participants\ puissent identifier l'utilisateur faisant les modifications.\n\nPolitique de conserv\ ation et de suppression des données : \n- effacement à J+6 mois : votre pad est susce\ ptible d'être effacé six mois après la date de dernière modification (utiliser les fo\ nctions d'export si nécessaire) ;\n- nous ne traitons pas de demandes de suppression \ autres que pour des motifs règlementés par la loi française. En effet, nous ne pouvon\ s pas assurément vous identifier comme le propriétaire d'un pad !\n\nConditions Génér\ ales d'Utilisation : \nEn utilisant ce service, vous acceptez tacitement les Conditio\ ns Générales d'Utilisation (CGU) des services Chalec (https://www.chalec.org/CGU) qui\ régissent formellement le service et priment sur toutes autres explications fournies\ sur cette page.\n\nLibrement, \nL'équipe Chalec (https://www.chalec.org),\nCandidat \ CHATONS par Libre en Communs (https://a-lec.org)\nmailto:contact+pad@chalec.org\nxmpp\ :chalec@salons.a-lec.org?join", ``` # Démarrer le service Etherpad Note @todo : cette partie est en travaux et le mécanisme décrit devrait évoluer vers un service systemd Tester le démarrer du service etherpad-lite : `$ src/bin/run.sh` Vérifier que le démarrage se passe sans encombre. Puis intérrompre le processus avec : CTRL-C Installer screen : ``` # apt install screen ``` Copier le fichier suivant dans un fichier run.sh : ``` #!/bin/sh export NODE_ENV=production /usr/bin/screen -dmS pad "/home/etherpad/etherpad-lite/src/bin/run.sh" ``` Rendre le fichier exécutable : `$ chmod +x run.sh` Lancer le script : `$ ./run.sh` Vérifier que le pad tourne dans le screen. Vérifier que la commande suivante fait apparaitre le pad dans la liste des écrans : `screen -ls` Créer le script `/home/etherpad/checkrestart.sh` qui va vérifier s'il y a besoin de relancer le processus : ``` #!/bin/sh ret=`ps -edf | grep etherpad-lite | grep -v grep` status=$? if [ "$status" -ne "0" ] ; then # echo "It seems like Etherpad-lite has been stopped or crashed.\nStarting etherpad-lite..."; /home/etherpad/run.sh fi ``` Le rendre exécutable : `chmod +x checkrestart.sh` Configurer du cron : `$ crontab -e` et insérer les lignes suivantes dans le fichier : ``` @reboot /home/etherpad/run.sh > /dev/null * * * * * /home/etherpad/checkrestart.sh ``` # Installation du proxy nginx Installer nginx et préparer le dossier de logs : ``` # apt install nginx # mkdir /var/log/nginx/pad.chalec.org # chown www-data:www-data /var/log/nginx/pad.chalec.org ``` Enregistrer le fichier de configuration de site nginx `/home/etherpad/pad.git/conf/nginx/sites-available/etherpad` à cet emplacement /etc/nginx/sites-available/etherpad et faire un lien symbolique dans /etc/nginx/sites-available/etherpad : ``` # cp /home/etherpad/pad.git/conf/nginx/conf.d/* /etc/nginx/conf.d/ # cd /etc/nginx/sites-enabled # ln -s ../sites-available/etherpad . ``` Créer les certificats : ``` # certbot certonly --nginx -d pad.chalec.org ``` Démarrer le service nginx : ``` # systemctl enable --now nginx ``` Ouvrir les ports du firewall : ``` # ufw allow proto tcp port 80,443 ``` Vérifier que le service répond en se rendant aux addresses suivantes : ``` http://pad.chalec.org https://pad.chalec.org ``` # Installation des Greffons etherpad Pour complémenter l'installation de base d'Etherpad, il faut ajouter quelques greffons. Installer les greffons suivants en se rendant sur la page d'administration https://pad.chalec.org/admin : - adminpads2 : lister les pads et par exemple de les supprimer - align : aligner à gauche / droite / centrer - author_hover : afficher l'auteur d'un texte en survolant avec la souris - delete_after_delay : supprimer automatiquement un pad après un certain délais d'inactivité - delete_empty_pads : supprimer automatiquement un pad vide - font_color : utiliser des couleurs dans le texte - font_size : utiliser des polices de différentes tailles - headings2 : titres et sous-titres - table_of_contents : table des matières Note : il existe une méthode pour installer cela en ligne de commande. @todo ## Export libreoffice Pour supporter l'export au format ODT, installer libreoffice : ``` # apt install libreoffice-nogui ``` Puis configurer le chemin du binaire dans le `settings.json` : ``` "soffice": "/usr/bin/soffice", ``` Ajouter le module de table des matières "table_of_contents" et configurer pour le désactiver par défaut (bug upstream, configuration non prise en compte, cf. #1) : ``` "ep_toc": { "disable_by_default": true }, ``` Ajouter le module de suppression automatique des pads inactif "delete_after_delay" et le configurer à J + six mois (temps en secondes). Indiquer qu'on fait la suppression au lancement et non de manière régulière en tâche de fond. En effet, il n'y a aucune urgence à faire ce genre de tâche. ``` "ep_delete_after_delay": { "delay": 15811200, // 6 * 30.5 * 24 * 3600 "loop": false, "deleteAtStart": true, "text": "" }, ``` # Securité et limites Paramétrer un buffer HTTP suffisamment grand pour notament importer des pads jusqu'à 20Mo dans le fichier `/home/etherpad/etherpad-lite/settings.json`: ``` socketIo { [...] "maxHttpBufferSize": 20000000 ``` Puis augmenter, dans la même section, la limite sur import et export : ``` "importExportRateLimiting": { // duration of the rate limit window (milliseconds) "windowMs": 90000, // maximum number of requests per IP to allow during the rate limit window "max": 10 }, ``` # Chalec infos Intaller Java : ``` # apt install openjdk-jre-headless ``` Ajouter l'utilisateur statoolinfos : ``` # adduser statoolinfos ``` Ajouter l'utilisateur statoolinfos au group admin pour qu'il puisse lire les logs : ``` # adduser statoolinfos admin ``` Se connecter avec le nouvel utilisateur : ``` # su - statoolinfos $ cd ``` Télécharger le binaire (jar) Statoolinfos à l'adresse suivante : `https://forge.devinsy.fr/devinsy/statoolinfos/releases` Décompresser dans `/home/statoolinfos/statool-` Faire un lien généric pour avoir un nom de dossier invariant "statoolinfos": `$ ln -s statoolinfos- statoolinfos` Restaurer la configuration statoolinfos ``` cp -r /home/etherpad/pad.git/www/ /var/ cp /home/etherpad/pad.git/conf/statoolinfos/pad.chalec.org.conf /var/www/html/.well-known/statoolinfos/ ``` Lancer une génération maximale des métriques : ``` /home/statoolinfos/statoolinfos/statoolinfos.sh probe -full /hhome/statoolinfos/statoolinfos/conf/pad.chalec.org.conf ``` Configurer le cron quotidien : ``` $ crontab -e 23 55 * * * /home/statoolinfos/statoolinfos/statoolinfos.sh probe -previousday /home/statoolinfos/statoolinfos/conf/pad.chalec.org.conf >> /home/statoolinfos/statoolinfos.log ```