Corrige la perte du compte admin à chaque déploiement : persiste /app/data
Build and deploy / test-python (push) Successful in 1m25s
Build and deploy / test-js (push) Successful in 6s
Build and deploy / build-and-push (push) Skipped
Build and deploy / deploy (push) Skipped

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 <noreply@anthropic.com>
This commit is contained in:
william
2026-08-30 16:30:44 +02:00
co-authored by Claude Sonnet 5
parent cc89b3f7e2
commit e9d12945a9
2 changed files with 21 additions and 8 deletions
+8
View File
@@ -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:
+13 -8
View File
@@ -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 "$*"