From e9d12945a9aa3439175d15e6dd490b7d24dd7925 Mon Sep 17 00:00:00 2001 From: william Date: Sun, 30 Aug 2026 16:30:44 +0200 Subject: [PATCH] =?UTF-8?q?Corrige=20la=20perte=20du=20compte=20admin=20?= =?UTF-8?q?=C3=A0=20chaque=20d=C3=A9ploiement=20:=20persiste=20/app/data?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit L'utilisateur signale devoir recréer un compte admin après chaque déploiement en prod. Cause : docker-compose.prod.yml ne montait un volume que pour /app/projects (les jeux) — la base des comptes créateurs (data/users.db, voir auth/connection.py) et la clé de session Flask (data/secret_key, voir core/flask_app.py::_load_or_create_secret_key) vivaient toutes les deux dans /app/data, jamais monté : chaque nouveau conteneur (à chaque déploiement) repartait d'un /app/data vide, donc d'une base de comptes vide ("premier compte = admin" recommençait à zéro) ET d'une nouvelle clé de session (tout le monde déconnecté, en plus de la perte du compte). Nouveau volume nommé forge_data:/app/data, à côté de forge_projects. docker-entrypoint.sh corrige aussi sa propriété (root par défaut à la création d'un volume nommé, comme pour forge_projects déjà) avant d'abandonner les privilèges root. Note : ce correctif ne prend effet qu'au déploiement SUIVANT sur main (le conteneur actuellement en prod n'a pas ce volume) — un dernier compte admin à recréer après ce déploiement, plus jamais ensuite. Co-Authored-By: Claude Sonnet 5 --- docker-compose.prod.yml | 8 ++++++++ docker-entrypoint.sh | 21 +++++++++++++-------- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index 2dcc3a25..a07544de 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -6,6 +6,13 @@ services: - "${PORT:-5050}:5050" volumes: - forge_projects:/app/projects + # Base des comptes créateurs (auth/connection.py, data/users.db) et + # clé de session Flask (core/flask_app.py, data/secret_key) — + # jusqu'ici ni l'un ni l'autre n'était persisté : chaque déploiement + # (nouveau conteneur) repartait d'un data/ vide, donc d'une base de + # comptes vide ("premier compte = admin" recommençait à zéro) et + # d'une nouvelle clé de session (tout le monde déconnecté). + - forge_data:/app/data environment: # Réinitialisation de mot de passe par email (voir auth/send_email.py) # — laissés vides ici tant qu'ils ne sont pas définis dans le .env du @@ -19,3 +26,4 @@ services: volumes: forge_projects: + forge_data: diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh index edbc08d4..5d69c961 100644 --- a/docker-entrypoint.sh +++ b/docker-entrypoint.sh @@ -1,14 +1,19 @@ #!/bin/sh -# Un volume Docker nommé (ex: forge_projects, voir docker-compose.prod.yml) -# est créé par Docker lui-même, propriété de root, AVANT que le conteneur ne -# démarre — le "chown" fait au build de l'image (voir Dockerfile) n'a donc -# aucun effet dessus une fois monté par-dessus /app/projects. On corrige ici, -# à chaque démarrage (idempotent, sans risque à répéter), puis on abandonne -# les privilèges root pour lancer le vrai serveur en tant qu'utilisateur +# Un volume Docker nommé (forge_projects/forge_data, voir +# docker-compose.prod.yml) est créé par Docker lui-même, propriété de +# root, AVANT que le conteneur ne démarre — le "chown" fait au build de +# l'image (voir Dockerfile) n'a donc aucun effet dessus une fois monté +# par-dessus /app/projects (les jeux) et /app/data (comptes créateurs, +# data/users.db, et clé de session Flask, data/secret_key — voir +# auth/connection.py, core/flask_app.py ; SANS ce volume, chaque nouveau +# déploiement repartait d'un /app/data vide : base de comptes vidée, +# nouvelle clé de session à chaque fois). On corrige ici, à chaque +# démarrage (idempotent, sans risque à répéter), puis on abandonne les +# privilèges root pour lancer le vrai serveur en tant qu'utilisateur # "forge" — ce script tourne donc brièvement en root, uniquement pour ça. set -e -mkdir -p /app/projects -chown -R forge:forge /app/projects +mkdir -p /app/projects /app/data +chown -R forge:forge /app/projects /app/data exec su forge -s /bin/sh -c "$*" -- 2.54.0