diff --git a/pica-etherpad/Dockerfile b/pica-etherpad/Dockerfile index 20e77dfcb17ca813a6495473506fe7e6198987cb..c37ddc6dee25a9899a9fba0bd8aa6e7697225435 100644 --- a/pica-etherpad/Dockerfile +++ b/pica-etherpad/Dockerfile @@ -2,7 +2,7 @@ FROM node:10-slim as base LABEL maintainer="antoine@barbare.me" -ARG ETHERPAD_VERSION_BUILD=1.7.0 +ARG ETHERPAD_VERSION_BUILD=1.7.5 ARG ETHERPAD_LANDING_PAGE_VERSION_BUILD=v0.1 ARG NODE_ENV_BUILD=production @@ -36,23 +36,32 @@ RUN curl -SL https://github.com/ether/etherpad-lite/archive/${ETHERPAD_VERSION}. npm install \ ep_align \ ep_author_hover \ + ep_chatdate \ + ep_colibris_full_width \ ep_comments_page \ ep_countable \ ep_delete_empty_pads \ ep_font_color \ + ep_font_family \ ep_headings2 \ - ep_markdown \ + ep_hide_referrer \ + ep_markdown \ + ep_pad_activity_nofication_in_title \ ep_pads_stats \ ep_page_view \ - ep_spellcheck \ + ep_prompt_for_name \ + ep_set_title_on_pad \ ep_subscript_and_superscript \ - ep_table_of_contents \ + ep_tables2 \ ep_user_font_size && \ git clone https://framagit.org/DeBugs/picasoft-etherpad-landing-page.git src/templates/picasoft-etherpad-landing-page && \ rm package-lock.json && \ git --git-dir=src/templates/picasoft-etherpad-landing-page/.git checkout ${ETHERPAD_LANDING_PAGE_VERSION} && \ cp src/templates/picasoft-etherpad-landing-page/index.html src/templates/index.html && \ - cp src/templates/picasoft-etherpad-landing-page/static/* src/static/ -r + cp src/templates/picasoft-etherpad-landing-page/static/* src/static/ -r && \ + # Change default hard-coded pad title + sed -i 's|Untitled Pad|Nouveau pad|g' node_modules/ep_set_title_on_pad/templates/title.ejs && \ + sed -i 's|Untitled Pad|Nouveau pad|g' node_modules/ep_set_title_on_pad/static/tests/frontend/specs/atest.js # construction de l'image finale @@ -60,7 +69,7 @@ FROM base COPY entrypoint.sh /opt/etherpad-lite/entrypoint.sh RUN apt-get update && \ - apt-get install -y mysql-client && \ + apt-get install -y mysql-client unoconv libreoffice-writer libreoffice-pdfimport && \ chmod +x /opt/etherpad-lite/entrypoint.sh && \ mkdir -p /opt/etherpad-lite && \ chown -R node /opt/etherpad-lite && \ diff --git a/pica-etherpad/README.md b/pica-etherpad/README.md new file mode 100644 index 0000000000000000000000000000000000000000..68d60967fab980757a4c917eb108c9ecad2db879 --- /dev/null +++ b/pica-etherpad/README.md @@ -0,0 +1,68 @@ +# Pica Etherpad + +Ce dossier contient une image d'Etherpad Lite maintenue par l'association. + +Tous les fichiers présents ici suffisent à lancer correctement les deux conteneurs (application et base de données), si un Traefik tourne sur la machine cible. Sinon, il faut simplement adapter l'URL présente dans `entrypoint.sh` et exposer un port du conteneur, mais c'est hors-propos. + +<!-- MarkdownTOC autolink="true" --> + +- [Environnement](#environnement) +- [Configuration](#configuration) + - [Ajouter ou modifier un paramètre](#ajouter-ou-modifier-un-param%C3%A8tre) +- [Mise à jour de l'image](#mise-%C3%A0-jour-de-limage) +- [Ajout d'un plugin](#ajout-dun-plugin) + +<!-- /MarkdownTOC --> + +## Environnement + +Etherpad se configure au lancement du conteneur avec des variables d'environnement. Elles sont présentes à trois endroits : + +* Le fichier `etherpad-app.secrets.example` contient les variables possibles pour créer un administrateur Etherpad, qui pourra par exemple modifier la configuration depuis l'interface graphique. Copiez le fichier en enlevant `.example` et remplacez les valeurs. Ce fichier est importé depuis `docker-compose.yml`. +* Le fichier `etherpad-db.secrets.example` contient les variables nécéssaires pour créer un utilisateur de la base de données. Le reste est similaire à l'autre fichier secret. +* Le reste des variables d'environnement non-confidentielles est affecté directement dans le fichier `docker-compose.yml`, via la directive `environment`. + +Les valeurs par défaut des variables (si elles ne sont pas affectées) se trouve dans `entrypoint.sh`. + +Pour information, les variables que l'on peut affecter directement dans le `docker-compose.yml` sont : + +* `ETHERPAD_MINIFY` +* `ETHERPAD_THEME` +* `ETHERPAD_TITLE` +* `ETHERPAD_PORT` + +Elles ont toutes une valeur par défaut fonctionnelle ; à ne modifier qu'en cas particulier. + +## Configuration + +### Ajouter ou modifier un paramètre + +Le fichier de configuration se trouve, dans le conteneur, à l'emplacement `/opt/etherpad-lite/settings.json`. Il est construit dynamiquement à chaque lancement du conteneur par le script `entrypoint.sh`. + +Pour modifier la configuration, il faudra donc changer la valeur de la variable d'environnement associée et relancer le conteneur. + +Pour ajouter un paramètre de configuration, il faudra : + +1. Créer une nouvelle variable d'environnement que l'on peut affecter dans le `docker-compose.yml` +2. Récupérer cette valeur dans `entrypoint.sh` et lui substituer une valeur par défaut si elle n'existe pas +3. Rajouter le paramètre de configuration lors de la construction du fichier `settings.json` +4. Tester en local que tout fonctionne +5. Reconstruire l'image et la pousser sur le Registry +6. Modifier le `docker-compose.yml` d'exemple **et** de production avec la nouvelle variable d'environnement, puis l'ajouter à ce README. + +## Mise à jour de l'image + +Pour mettre à jour la version d'Etherpad, il faut simplement reconstruire l'image en ayant préalablement modifié la variable `ETHERPAD_VERSION_BUILD` du Dockerfile. + +Ensuite, on construit l'image, on la teste, on la tag et on la pousse sur le registry (procédure classique). +Il faut ensuite mettre à jour le `docker-compose` d'exemple pour refléter la nouvelle version. + +## Ajout d'un plugin + +Etherpad maintient une [liste officielle des plugins](https://static.etherpad.org/plugins.html). + +Pour installer un plugin, on évitera de passer par l'interface administrateur et on préfèrera modifier le [Dockerfile](Dockerfile) directement. + +Il suffit pour ce faire d'ajouter le nom du package npm correspondant à l'endroit où ils sont tous installés (`npm install`...), en respectant l'ordre alphabétique pour la facilité de lecture. + +Il suffit ensuite de mettre à jour l'image. \ No newline at end of file diff --git a/pica-etherpad/docker-compose.yml b/pica-etherpad/docker-compose.yml index fa5b85f0a19203721574caed3a4a028da747b89d..f519eec6edfd62011d7161fefe016278e80e39e5 100755 --- a/pica-etherpad/docker-compose.yml +++ b/pica-etherpad/docker-compose.yml @@ -1,7 +1,7 @@ version : "2.4" services: etherpad-app: - image: pica-etherpad:1.7.0 + image: pica-etherpad:1.7.5 container_name: etherpad-app links: - etherpad-db:mysql @@ -15,6 +15,9 @@ services: - "traefik.frontend.rule=Host:pad.picasoft.net" - "traefik.port=8080" - "traefik.enable=true" + environment: + - ETHERPAD_THEME=colibris + - ETHERPAD_MINIFY=true restart: always etherpad-db: @@ -29,9 +32,9 @@ services: - /DATA/docker/etherpad/etherpad-db/data:/var/lib/mysql env_file: ./secrets/etherpad-db.secrets healthcheck: - test: "/usr/bin/mysql --user=root --password=$${MYSQL_ROOT_PASSWORD} --execute \"SHOW DATABASES;\"" - interval: 4s - timeout: 20s - retries: 10 + test: "/usr/bin/mysql --user=root --password=$${MYSQL_ROOT_PASSWORD} --execute \"SHOW DATABASES;\"" + interval: 4s + timeout: 20s + retries: 10 restart: always diff --git a/pica-etherpad/entrypoint.sh b/pica-etherpad/entrypoint.sh index a3ca9967e6d834bb82f0886e4d18e97e79f9e1d5..61a0cb57ee24c1f35e45b7bf8ce630c745796599 100644 --- a/pica-etherpad/entrypoint.sh +++ b/pica-etherpad/entrypoint.sh @@ -23,9 +23,41 @@ if [ -z "$ETHERPAD_DB_PASSWORD" ]; then exit 1 fi -: ${ETHERPAD_TITLE:=Etherpad} +# Title of the instance +: ${ETHERPAD_TITLE:=Picapad} : ${ETHERPAD_PORT:=8080} +# Skin of the instance ; for now only no-skin and colibris exist +: ${ETHERPAD_THEME:=no-skin} + +# If true, minify all CSS and JS but prevent debugging client-side +: ${ETHERPAD_MINIFY:=false} + +# Default text when creating a new pad +: ${ETHERPAD_DEFAULT_TEXT:="Bienvenue sur Picapad, une instance d'Etherpad, un éditeur de texte collaboratif libre.\n\ +-----------------------------------------------------------\n\ +Le texte que vous saisissez est automatiquement synchronisé avec toutes les personnes naviguant sur ce pad.\n\n\ +Prenez des notes et rédigez des documents librement !\n\n\ +→ Pour bien commencer :\n\ +• Renseignez votre nom ou pseudo, en cliquant sur l’icône « utilisateur » en haut à droite.\n\ +• Choisissez votre couleur d'écriture au même endroit.\n\ +• Les contributions de chacun se synchronisent « en temps réel » sous leur propre couleur.\n\ +• Un chat vous permet de discuter avec les autres personnes présentes sur le pad.\n\n\ +→ Fonctionnalités :\n\ +• Couleur du texte, tableau, choix et taille de police, alignement, pleine page...\n\ +• Sauvegarde automatique du pad.\n\ +• Historique complet du pad (bouton en forme d'horloge)\n\ +• Sauvegarde de versions clés (bouton en forme d'étoile).\n\ +• Commentaires avec suggestion de remplacement (bouton en forme de bulle).\n\ +• Les réglages vous permettent de désactiver les couleurs, de changer la langue, d'activer les sauts de pages...\n\n\ +→ Partage :\n\ +• Import et export dans divers formats (bouton avec les flèches).\n\ +• Partage en lecture seule, pour éviter les modifications non voulues (bouton </>).\n\n\ +Pensez à garder l'URL de votre pad pour le retrouver.\nAttention, celui-ci est public, c'est-à-dire que toute personne qui en possède l'URL pourra y accéder : \ +n'y stockez pas d'informations confidentielles !\n\ +-----------------------------------------------------------\n\ +Une question ? Un problème ? Envoyez-nous un mail à picasoft@assos.utc.fr !"} + # Check if database already exists RESULT=`mysql -u${ETHERPAD_DB_USER} -p${ETHERPAD_DB_PASSWORD} \ -h${MYSQL_PORT_3306_TCP_ADDR} --skip-column-names \ @@ -43,15 +75,26 @@ cat <<- EOF > /opt/etherpad-lite/settings.json { "title": "${ETHERPAD_TITLE}", "ip": "0.0.0.0", - "port" :${ETHERPAD_PORT}, - "dbType" : "mysql", - "dbSettings" : { - "user" : "${ETHERPAD_DB_USER}", - "host" : "${MYSQL_PORT_3306_TCP_ADDR}", - "password": "${ETHERPAD_DB_PASSWORD}", - "database": "${ETHERPAD_DB_NAME}", - "charset" : "utf8mb4" - }, + "port": "${ETHERPAD_PORT}", + "dbType": "mysql", + "dbSettings": { + "user" : "${ETHERPAD_DB_USER}", + "host" : "${MYSQL_PORT_3306_TCP_ADDR}", + "password": "${ETHERPAD_DB_PASSWORD}", + "database": "${ETHERPAD_DB_NAME}", + "charset" : "utf8mb4" + }, + "minify": "${ETHERPAD_MINIFY}", + "skinName": "${ETHERPAD_THEME}", + "defaultPadText": "${ETHERPAD_DEFAULT_TEXT}", + "padOptions": { + "lang": "fr", + "userName": "Anonyme", + "alwaysShowChat": false, + "chatAndUsers": false + }, + "allowUnknownFileEnds": false, + "soffice": "/usr/bin/soffice", EOF if [ $ETHERPAD_ADMIN_PASSWORD ]; then @@ -64,7 +107,7 @@ if [ $ETHERPAD_ADMIN_PASSWORD ]; then "password": "${ETHERPAD_ADMIN_PASSWORD}", "is_admin": true } - }, + } EOF fi @@ -72,5 +115,4 @@ cat <<- EOF >> /opt/etherpad-lite/settings.json } EOF - exec "$@"