Files
ENI-projet-piscine/infra/garage/README.md
T
Johan LEROY e53c7e441c 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
2026-09-24 10:30:04 +02:00

1.5 KiB

Garage

Stockage objet S3 de la stack, un conteneur par projet Compose (ADR 0019). Il ne sert qu'au DAG retention, qui y archive les chunks de reading avant de les supprimer.

  • garage.toml : configuration versionnée, sans secret, montée en lecture seule. Les secrets arrivent par l'environnement : GARAGE_RPC_SECRET, GARAGE_ADMIN_TOKEN, GARAGE_METRICS_TOKEN.
  • Démarrage --single-node --default-bucket : le premier démarrage crée le layout, la clé GARAGE_ACCESS_KEY et le bucket GARAGE_BUCKET. Rejouable tant que les volumes garage_meta et garage_data sont conservés. Changer GARAGE_SECRET_KEY ensuite fait refuser le démarrage.
  • Ports, sur 127.0.0.1 seulement : GARAGE_S3_PORT (3900) pour l'API S3, GARAGE_ADMIN_PORT (3903) pour /health (sans jeton) et /metrics (jeton GARAGE_METRICS_TOKEN, scruté par Prometheus). Le RPC 3901 n'est pas publié.
  • Nœud unique, replication_factor = 1, moteur sqlite : aucune redondance, le coffre LUKS de la VM (ADR 0020) et l'instantané des métadonnées toutes les six heures sont les seules protections.
docker compose exec garage /garage status
docker compose exec garage /garage bucket info enervision-archives
docker compose exec garage /garage key info --show-secret "$GARAGE_ACCESS_KEY"

Tests de fumée : tests/garage/test_smoke.py, joués par la CI contre le vrai conteneur (job « Validation des fichiers Compose et de la supervision »). En local, stack démarrée et .env chargé : uvx --with boto3 pytest tests/garage.