Commit 0e13fcd8 authored by Romain Maliach-Auguste's avatar Romain Maliach-Auguste 🌵 Committed by Quentin Duchemin

[Etherpad] Use two Compose files, one for each instance, and fix container internal URLs references

This way, you don't need to create useless networks and secrets files when you want to launch only one instance. The docker_test.sh script is still compatible, just use pica-etherpad/week or pica-etherpad/standard
parent 80070dd7
......@@ -26,6 +26,8 @@ create_dumb_secrets() {
fi
}
REPO_PATH=$(pwd)
if [[ $(hostname) != *"test"* ]]; then
echo "ERROR : DO NOT USE OUTSIDE OF A TEST MACHINE !"
usage
......@@ -48,7 +50,6 @@ if [[ -d "$1" ]]; then
echo -e "\n==== Stop and remove existing containers and volumes ===="
docker-compose down -v
cd ..
else
echo "WARNING : directory does not exist ($1) ; will try to pull"
fi
......@@ -59,20 +60,13 @@ read ans
if [ $ans == "y" ]; then
git pull
git checkout -- $1
cd ${REPO_PATH}/$1
git checkout -- .
else
echo "Aborting."
exit 0
fi
if [[ ! -d "$1" ]]; then
echo "ERROR : directory does not exist ($1)"
usage
exit 1
fi
cd "$1"
create_dumb_secrets
echo -e "\n==== Remove and re-create named external volumes ===="
......
secrets/etherpad-app.secrets
secrets/etherpad-db.secrets
## Version 1.8.6
Ajout d'un script de suppression externe pour la suppression des pads, pour éviter une surcharge de l'instance lors de la boucle de suppression interne.
Séparation des fichiers Compose en deux dossiers différents pour plus de clarté et éviter de lancer les deux instances simultanément par erreur.
## Version 1.8.4
Double bump :
......
......@@ -13,6 +13,9 @@ ARG ETHERPAD_PLUGINS="\
ep_pads_stats ep_prompt_for_name ep_set_title_on_pad \
ep_subscript_and_superscript"
RUN apt-get update && \
apt-get install -y \
curl \
......@@ -25,15 +28,27 @@ RUN apt-get update && \
unzip && \
mkdir -p /opt/etherpad-lite/
# Try to stick to the LDAP UID for etherpad (OU=services)
# WARNING: is also defined hereinbelow
ARG UID=5004
RUN useradd --uid ${UID} --create-home etherpad
RUN chown etherpad /opt/etherpad-lite
WORKDIR /opt/etherpad-lite
# Install Etherpad
# Install Etherpad, as user etherpad
USER etherpad
RUN curl -SL https://github.com/ether/etherpad-lite/archive/${ETHERPAD_VERSION_BUILD}.zip > etherpad.zip && \
unzip etherpad && \
rm -Rf etherpad.zip etherpad-lite-${ETHERPAD_VERSION_BUILD}/.git && \
mv etherpad-lite-${ETHERPAD_VERSION_BUILD}/* . && \
bin/installDeps.sh
COPY ./landing-page ./src/templates/landing-page
COPY --chown=etherpad ./landing-page ./src/templates/landing-page
# Build and replace landing page
RUN npm install minify && \
......@@ -51,29 +66,40 @@ RUN for PLUGIN_NAME in ${ETHERPAD_PLUGINS}; do npm install "${PLUGIN_NAME}"; don
FROM base
# Try to stick to the LDAP UID for etherpad (OU=services)
# WARNING: is also defined hereinabove
ARG UID=5004
COPY entrypoint.sh /opt/etherpad-lite/entrypoint.sh
RUN useradd --uid ${UID} --create-home etherpad
# Used to avoid very long chown (due to https://github.com/docker/for-linux/issues/388)
USER etherpad
# Import des fichiers téléchargés dans l'image downloader
COPY --from=downloader /opt/etherpad-lite /opt/etherpad-lite/
RUN chown -R etherpad /opt/etherpad-lite
# Install debian packages, as root
USER root
RUN apt-get update && \
apt-get install -y curl nano postgresql-client abiword && \
chmod +x /opt/etherpad-lite/entrypoint.sh && \
usermod -d /opt/etherpad-lite etherpad && \
chown -R etherpad /opt/etherpad-lite && \
rm -rf /var/lib/apt/lists/*
RUN mkdir /opt/etherpad-lite/deleted_pads && \
chown -R etherpad:etherpad /opt/etherpad-lite/deleted_pads
# Set etherpad as owner of etherpad (permission for its content was already set in downloader)
RUN chown etherpad:etherpad /opt/etherpad-lite
# Copy entrypoint script
COPY entrypoint.sh /opt/etherpad-lite/entrypoint.sh
RUN chmod +x /opt/etherpad-lite/entrypoint.sh && \
usermod -d /opt/etherpad-lite etherpad
# Create path owned by etherpad to mount the API key
RUN mkdir /mountedAPIkey && chown etherpad:etherpad /mountedAPIkey
# Settings for entrypoint
USER etherpad
EXPOSE 8080
HEALTHCHECK --interval=20s --timeout=3s CMD curl --fail http://localhost:8080 || exit 1
WORKDIR /opt/etherpad-lite/
USER etherpad
ENTRYPOINT ["/opt/etherpad-lite/entrypoint.sh"]
CMD [ "/bin/bash", "-c", "/opt/etherpad-lite/bin/run.sh" ]
# Installed here by debian
ENV ABIWORD "/usr/bin/abiword"
ENTRYPOINT ["/opt/etherpad-lite/entrypoint.sh", "/opt/etherpad-lite/bin/run.sh" ]
......@@ -2,13 +2,17 @@
Ce dossier contient une image d'Etherpad Lite maintenue par l'association.
Le Docker Compose associé permet de lancer deux instances : une principale et une hebdomadaire. La seule différence est la durée de la politique de rétention.
Les dossiers `standard` et `week` contiennent un fichier Compose permettant de lancer une instance : la différence majeure est la durée de la politique de rétention.
Tous les fichiers présents ici suffisent à lancer correctement les conteneurs (application et base de données), si un Traefik tourne sur la machine cible.
## Lancement et tests
Les documentations génériques [pour les tests](https://wiki.picasoft.net/doku.php?id=technique:docker:picasoft:test) et [pour le lancement](https://wiki.picasoft.net/doku.php?id=technique:docker:picasoft:admin#lancement_d_un_nouveau_service) s'appliquent.
Il faudra simplement veiller à utiliser les sous-dossiers `standard` et `week` au lieu de ce sous-dossier ci.
## Mise à jour de l'image
Pour mettre à jour la version d'Etherpad, il faut simplement modifir la variable `ETHERPAD_VERSION_BUILD` du [Dockerfile](./Dockerfile) et le tag dans l'image dans [docker-compose.yml](./docker-compose.yml).
Pour mettre à jour la version d'Etherpad, il faut simplement modifir la variable `ETHERPAD_VERSION_BUILD` du [Dockerfile](./Dockerfile) et le tag des fichiers Compose de `week` et `standard`.
On vérifiera qu'il n'y a pas de nouveaux paramètres importants dans le fichier `settings.json`, sur l'[historique GitHub](https://github.com/ether/etherpad-lite/commits/develop/settings.json.docker).
......@@ -24,12 +28,10 @@ Le mot de passe administrateur est défini dans le fichier de secrets.
Etherpad se configure au lancement du conteneur avec des variables d'environnement. Elles sont présentes à deux endroits :
* Les fichiers dans [secrets](./secrets) contiennent les variables nécessaires pour créer une base de données, un utilisateur et stocker les mots de passe.
* Le reste des variables d'environnement non-confidentielles est affecté directement dans le [docker-compose.yml](./docker-compose.yml), via la directive `environment`.
Lors d'un premier lancement, sur la machine cible, après avoir récupéré une version à jour de ce dépôt, copiez les fichiers en enlevant `.example` et remplacez les valeurs. Ces fichiers sont importés depuis [docker-compose.yml][./docker-compose.yml]. Attention, les secrets doivent être **différents** pour les deux instances.
* Les fichiers dans les sous-dossiers `secrets` contiennent les variables nécessaires pour créer une base de données, un utilisateur et stocker les mots de passe.
* Le reste des variables d'environnement non-confidentielles est affecté directement dans les fichiers Compose, via la directive `environment`.
Toutes les paramètres sont configurables via l'environnement. On pourra regarder le fichier [settings.json](./settings.json) pour une référence. Des explications sont [disponibles ici](https://github.com/ether/etherpad-lite/blob/develop/settings.json.docker). Ce fichier contient uniquement les valeurs par défaut. La configuration doit avoir lieu dans le [docker-compose.yml](./docker-compose.yml).
Toutes les paramètres sont configurables via l'environnement. On pourra regarder le fichier [settings.json](./standard/settings.json) pour une référence. Des explications sont [disponibles ici](https://github.com/ether/etherpad-lite/blob/develop/settings.json.docker). Ce fichier contient uniquement les valeurs par défaut. La configuration doit avoir lieu dans les fichiers Compose.
## Séparation des instances
......
version : "3.7"
volumes:
etherpad-db:
db:
name: etherpad-db-pg
weekpad-db:
name: weekpad-db
deleted-pads-standard:
deleted-pads:
name: deleted-pads-standard
deleted-pads-week:
name: deleted-pads-week
api-key:
name: etherpad-api-key
networks:
standard:
name: etherpad_main
week:
name: etherpad_week
app-db:
name: etherpad-queries-database
dpad-app:
name: etherpad-dpad-queries-app
proxy:
external: true
services:
etherpad-app:
db:
image: postgres:12
container_name: etherpad_db
volumes:
- db:/var/lib/postgresql/data
env_file: ./secrets/etherpad-db.secrets
networks:
- app-db
restart: unless-stopped
app:
image: registry.picasoft.net/pica-etherpad:1.8.6
build: .
container_name: etherpad-app
build: ..
container_name: etherpad_app
env_file: ./secrets/etherpad-app.secrets
volumes:
- ./settings.json:/opt/etherpad-lite/settings.json
- deleted-pads-standard:/opt/etherpad-lite/deleted_pads
- ./settings.json:/opt/etherpad-lite/settings.json:ro
- api-key:/mountedAPIkey
command: ["--apikey", "/mountedAPIkey/APIKEY.txt"]
labels:
traefik.http.routers.etherpad-app.entrypoints: websecure
traefik.http.routers.etherpad-app.rule: Host(`pad.picasoft.net`)
traefik.http.services.etherpad-app.loadbalancer.server.port: 8080
traefik.enable: true
environment:
DB_HOST: "etherpad-db"
DB_HOST: "etherpad_db"
LOGLEVEL: "INFO"
MINIFY: "true"
PORT: 8080
THEME: "colibris"
TITLE: "Picapad"
TRUST_PROXY: "true"
ABIWORD: "/usr/bin/abiword"
networks:
- proxy
- standard
- app-db
- dpad-app
depends_on:
- etherpad-db
- db
restart: unless-stopped
etherpad-db:
image: postgres:12
container_name: etherpad-db
delete-pad-after-delay:
image: registry.picasoft.net/pica-etherpad-delete-after-delay:picasoft-docker.1.0.1
container_name: etherpad_delete-pad-after-delay
build:
context: https://gitlab.utc.fr/picasoft/projets/delete-pad-after-delay.git#picasoft-docker.1.0.1
volumes:
- etherpad-db:/var/lib/postgresql/data
env_file: ./secrets/etherpad-db.secrets
- api-key:/mountedAPIkey:ro
- deleted-pads:/opt/etherpad-lite/deleted_pads
networks:
- standard
restart: unless-stopped
etherpad-week-app:
image: registry.picasoft.net/pica-etherpad:1.8.6
container_name: etherpad-week-app
build: .
env_file: ./secrets/etherpad-week-app.secrets
volumes:
- ./settings_week.json:/opt/etherpad-lite/settings.json
- deleted-pads-week:/opt/etherpad-lite/deleted_pads
labels:
traefik.http.routers.etherpad-week-app.entrypoints: websecure
traefik.http.routers.etherpad-week-app.rule: Host(`week.pad.picasoft.net`)
traefik.http.services.etherpad-week-app.loadbalancer.server.port: 8080
traefik.enable: true
- dpad-app
environment:
DB_HOST: "etherpad-week-db"
LOGLEVEL: "INFO"
MINIFY: "true"
PORT: 8080
THEME: "colibris"
TITLE: "Picapad Hebdo"
TRUST_PROXY: "true"
ABIWORD: "/usr/bin/abiword"
# Must match app container name and port
URL: "http://etherpad_app:8080"
# In seconds (2 years). MUST be COHERENT with settings.json
DEL: 71712000
# Same mount point than deleted-pads
DIR: "/opt/etherpad-lite/deleted_pads"
# Same mount point than api-key + APIKEY.txt
APIKEY_PATH: "/mountedAPIkey/APIKEY.txt"
depends_on:
- etherpad-week-db
networks:
- proxy
- week
restart: unless-stopped
etherpad-week-db:
image: postgres:12
container_name: etherpad-week-db
volumes:
- weekpad-db:/var/lib/postgresql/data
env_file: ./secrets/etherpad-week-db.secrets
- app
restart: unless-stopped
networks:
- week
......@@ -15,7 +15,7 @@
"password": "${DB_PASSWORD}",
"charset": "${DB_CHARSET:utf8mb4}"
},
"defaultPadText": "${DEFAULT_PAD_TEXT:Bienvenue sur Picapad, une instance d'Etherpad, un éditeur de texte collaboratif libre.\n-----------------------------------------------------------\nATTENTION : tous les pads de cette instance seront supprimés après 2 ans d'inactivité !\n\nLe texte que vous saisissez est automatiquement synchronisé avec toutes les personnes naviguant sur ce pad.\n\nPrenez 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\nPensez à 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-----------------------------------------------------------\nUne question ? Un problème ? Envoyez-nous un mail à picasoft@assos.utc.fr !}",
"defaultPadText": "${DEFAULT_PAD_TEXT:Bienvenue sur Picapad, une instance d'Etherpad, un éditeur de texte collaboratif libre.\n-----------------------------------------------------------\nATTENTION : tous les pads de cette instance seront supprimés après 2 ans d'inactivité ! Nous conservons un backup des pads supprimés en cas d'erreur : n'hésitez pas à nous envoyer un message pour récupérer le contenu d'un pad que vous auriez perdu.\n\nLe texte que vous saisissez est automatiquement synchronisé avec toutes les personnes naviguant sur ce pad.\n\nPrenez 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\nPensez à 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-----------------------------------------------------------\nUne question ? Un problème ? Envoyez-nous un mail à picasoft@assos.utc.fr !}",
"padOptions": {
"noColors": "${PAD_OPTIONS_NO_COLORS:false}",
"showControls": "${PAD_OPTIONS_SHOW_CONTROLS:true}",
......@@ -120,8 +120,8 @@
},
"ep_delete_after_delay": {
"delay": 71712000, // 830 days, in seconds (2 years)
"loop": true,
"loopDelay": 604800, // 1 week
"loop": false, // false = use an external script
"loopDelay": 0,
"deleteAtStart": false,
"text": "Le contenu de ce pad a été supprimé pour cause d'inactivité pendant 2 ans."
},
......
version : "3.7"
volumes:
db:
name: weekpad-db
deleted-pads:
name: deleted-pads-week
api-key:
name: etherpad-api-week-key
networks:
app-db:
name: etherpad_week-queries-database
dpad-app:
name: etherpad_week-dpad-queries-app
proxy:
external: true
services:
db:
image: postgres:12
container_name: etherpad_week_db
volumes:
- db:/var/lib/postgresql/data
env_file: ./secrets/etherpad-week-db.secrets
networks:
- app-db
restart: unless-stopped
app:
image: registry.picasoft.net/pica-etherpad:1.8.6
build: ..
container_name: etherpad_week_app
env_file: ./secrets/etherpad-week-app.secrets
volumes:
- ./settings.json:/opt/etherpad-lite/settings.json:ro
- api-key:/mountedAPIkey
command: ["--apikey", "/mountedAPIkey/APIKEY.txt"]
labels:
traefik.http.routers.etherpad-app.entrypoints: websecure
traefik.http.routers.etherpad-app.rule: Host(`week.pad.picasoft.net`)
traefik.http.services.etherpad-app.loadbalancer.server.port: 8080
traefik.enable: true
environment:
DB_HOST: "etherpad_week_db"
LOGLEVEL: "INFO"
MINIFY: "true"
PORT: 8080
THEME: "colibris"
TITLE: "Picapad Hebdo"
TRUST_PROXY: "true"
networks:
- proxy
- app-db
- dpad-app
depends_on:
- db
restart: unless-stopped
delete-pad-after-delay:
image: registry.picasoft.net/pica-etherpad-delete-after-delay:picasoft-docker.1.0.1
container_name: etherpad_week-delete-pad-after-delay
build:
context: https://gitlab.utc.fr/picasoft/projets/delete-pad-after-delay.git#picasoft-docker.1.0.1
volumes:
- api-key:/mountedAPIkey:ro
- deleted-pads:/opt/etherpad-lite/deleted_pads
networks:
- dpad-app
environment:
# Must match app container name and port
URL: "http://etherpad_week_app:8080"
# In seconds (14 days). MUST be COHERENT with settings.json
DEL: 1209600
# Same mount point than deleted-pads
DIR: "/opt/etherpad-lite/deleted_pads"
# Same mount point than api-key + APIKEY.txt
APIKEY_PATH: "/mountedAPIkey/APIKEY.txt"
depends_on:
- app
restart: unless-stopped
......@@ -15,7 +15,7 @@
"password": "${DB_PASSWORD}",
"charset": "${DB_CHARSET:utf8mb4}"
},
"defaultPadText": "${DEFAULT_PAD_TEXT:Bienvenue sur Picapad Hebdo, une instance d'Etherpad, un éditeur de texte collaboratif libre.\n-----------------------------------------------------------\nATTENTION : tous les pads de cette instance seront supprimés après 14 jours d'inactivité !\n\nLe texte que vous saisissez est automatiquement synchronisé avec toutes les personnes naviguant sur ce pad.\n\nPrenez 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\nPensez à 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-----------------------------------------------------------\nUne question ? Un problème ? Envoyez-nous un mail à picasoft@assos.utc.fr !}",
"defaultPadText": "${DEFAULT_PAD_TEXT:Bienvenue sur Picapad Hebdo, une instance d'Etherpad, un éditeur de texte collaboratif libre.\n-----------------------------------------------------------\nATTENTION : tous les pads de cette instance seront supprimés après 14 jours d'inactivité ! Nous conservons un backup des pads supprimés en cas d'erreur : n'hésitez pas à nous envoyer un message pour récupérer le contenu d'un pad que vous auriez perdu.\n\nLe texte que vous saisissez est automatiquement synchronisé avec toutes les personnes naviguant sur ce pad.\n\nPrenez 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\nPensez à 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-----------------------------------------------------------\nUne question ? Un problème ? Envoyez-nous un mail à picasoft@assos.utc.fr !}",
"padOptions": {
"noColors": "${PAD_OPTIONS_NO_COLORS:false}",
"showControls": "${PAD_OPTIONS_SHOW_CONTROLS:true}",
......@@ -120,8 +120,8 @@
},
"ep_delete_after_delay": {
"delay": 1209600, // 14 days, in seconds
"loop": true,
"loopDelay": 604800, // 1 week
"loop": false, // false = use an external script
"loopDelay": 0,
"deleteAtStart": false,
"text": "Le contenu de ce pad a été supprimé pour cause d'inactivité pendant 14 jours."
},
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment