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 "$*"