feat(infra): déploie Garage par environnement, secrets par le .env, fumée S3 en CI

Reprend l'amorce de la PR 164 et l'intègre à la stack : service `garage` (dxflrs/garage v2.4.1,
`--single-node --default-bucket`) dans docker-compose.yml, garage.toml versionné sans secret,
ports sur 127.0.0.1 décalés par environnement dans provision-host.sh, garde des six clés
GARAGE_* dans le Makefile, cible Prometheus avec jeton, tests de fumée déplacés dans
tests/garage et joués par le job compose d'infra.yml contre le vrai conteneur, SSE-C compris.
Variables APP_S3_* et APP_READING_RETENTION_DAYS posées sur airflow-scheduler pour le DAG
`retention`. ADR 0019.

Closes #24
This commit is contained in:
Johan LEROY
2026-09-24 10:30:04 +02:00
parent 0a7a802b38
commit e53c7e441c
19 changed files with 372 additions and 105 deletions
+25
View File
@@ -52,6 +52,31 @@ AIRFLOW_ADMIN_EMAIL=admin@enervision.fr
# python -c "import secrets; print(secrets.token_urlsafe(48))"
AIRFLOW_APP_SECRET_KEY=change_me
# Garage, stockage objet S3 par environnement (ADR 0019) : un conteneur par projet Compose, publié
# sur 127.0.0.1 seulement. Les six secrets ci-dessous sont exigés par `make services-up` et
# `make stack-up` ; scripts/provision-host.sh les génère sur la VM.
# 32 octets en hexadécimal, rien d'autre n'est accepté : openssl rand -hex 32
GARAGE_RPC_SECRET=change_me
# Jetons de l'API d'administration et de /metrics (port 3903). Même générateur qu'APP_SECRET_KEY.
GARAGE_ADMIN_TOKEN=change_me
GARAGE_METRICS_TOKEN=change_me
# Clé S3 créée au premier démarrage (`--default-bucket`). Identifiant : echo "GK$(openssl rand -hex 12)"
# Secret : openssl rand -hex 32. Ne plus le changer ensuite, Garage refuserait de démarrer.
GARAGE_ACCESS_KEY=change_me
GARAGE_SECRET_KEY=change_me
GARAGE_BUCKET=enervision-archives
# Ports S3 et admin sur 127.0.0.1. Recette : 3910 et 3913, dev : 3920 et 3923.
GARAGE_S3_PORT=3900
GARAGE_ADMIN_PORT=3903
# Rétention des mesures (ADR 0019, 0020) : le DAG `retention` exporte chaque nuit vers Garage les
# chunks de `reading` plus vieux que cette borne, puis les supprime. L'historique de démonstration
# s'arrête fin 2024 : sous 21 mois, la démo disparaîtrait.
READING_RETENTION_DAYS=1095
# Clé SSE-C des archives, 32 octets en base64 : openssl rand -base64 32. La perdre rend les
# archives illisibles ; la sauvegarder hors de la VM.
GARAGE_SSE_KEY=change_me
# Stack complète derrière le reverse proxy (docker-compose.prod.yml).
# PUBLIC_HOST alimente l'origine CORS, le lien de réinitialisation et le certificat.
PUBLIC_HOST=enervision.local