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:
@@ -0,0 +1,25 @@
|
||||
# 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.
|
||||
|
||||
```bash
|
||||
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`.
|
||||
@@ -0,0 +1,22 @@
|
||||
# Contrainte : aucun secret ici, ce fichier est versionné et monté en lecture seule. Garage lit
|
||||
# GARAGE_RPC_SECRET, GARAGE_ADMIN_TOKEN et GARAGE_METRICS_TOKEN dans son environnement, posés par
|
||||
# docker-compose.yml depuis le .env (ADR 0019). `--single-node` exige replication_factor = 1.
|
||||
|
||||
metadata_dir = "/var/lib/garage/meta"
|
||||
data_dir = "/var/lib/garage/data"
|
||||
db_engine = "sqlite"
|
||||
metadata_auto_snapshot_interval = "6h"
|
||||
|
||||
replication_factor = 1
|
||||
|
||||
rpc_bind_addr = "[::]:3901"
|
||||
rpc_public_addr = "127.0.0.1:3901"
|
||||
|
||||
[s3_api]
|
||||
s3_region = "garage"
|
||||
api_bind_addr = "[::]:3900"
|
||||
root_domain = ".s3.garage.localhost"
|
||||
|
||||
[admin]
|
||||
api_bind_addr = "[::]:3903"
|
||||
metrics_require_token = true
|
||||
Reference in New Issue
Block a user