Files
Johan LEROY 0462dd01ba feat(scripts): chiffre au repos les volumes Docker de la VM par un coffre LUKS
scripts/coffre-luks.sh pose un coffre LUKS2 dans un fichier image, bind-monte
/var/lib/docker/volumes depuis ce coffre et exige son montage pour que Docker démarre
(drop-in RequiresMountsFor). Migration à froid rejouable, jouée par l'opérateur ; null_resource
Terraform optionnel (coffre_taille). Les archives déposées sur Garage sont chiffrées par SSE-C
(clé GARAGE_SSE_KEY). ADR 0020, runbook et tableaux Garage dans 10-infra.md.

Closes #42
2026-09-24 10:35:31 +02:00

3.3 KiB

Infrastructure

Provisionnement Terraform des machines on-premise. Terraform prepare la machine, GitHub Actions deploie l'application : voir l'ADR 0010. Rien ici ne construit d'image ni ne lance de conteneur.

  • terraform/modules : modules reutilisables.
    • k3s : installe un cluster k3s single-node sur une machine distante via SSH (script officiel get.k3s.io) et rapatrie le kubeconfig en local.
  • terraform/environments/<racine> : une racine par machine provisionnee.
    • vm-eni : la VM eadl-2025-nantes-g3, qui porte les environnements dev, rec et prod (ADR 0009, ADR 0017). Installe Docker, execute scripts/provision-host.sh, enregistre le runner GitHub Actions.
    • k3s-cible : le cluster k3s, cible a terme de docs/architecture/10-infra.md. Jamais applique.

Usage (environments/vm-eni)

cd infra/terraform/environments/vm-eni
cp terraform.tfvars.example terraform.tfvars
terraform init
terraform apply

terraform.tfvars est ignore par git. Trois valeurs sont a renseigner avant l'apply :

  • proprietaire : l'utilisateur qui possede /srv/enervision et fait tourner le runner. Il doit deja exister sur la machine.
  • runner_version : a epingler depuis https://github.com/actions/runner/releases.
  • runner_token : jeton d'enregistrement, valable une heure et pour une seule inscription. Parametres du depot, Actions, Runners, New self-hosted runner. Seul un administrateur du depot peut le creer.

Apres l'apply, la machine porte /srv/enervision/dev, /srv/enervision/rec et /srv/enervision/prod, chacun avec son .env et son certificat. Le premier demarrage reste manuel, make stack-up dans chaque dossier ; les suivants sont joues par le runner a chaque push sur dev et sur main, et a chaque lancement manuel d'une autre branche pour dev.

Noms et certificats (ADR 0018) : avant l'apply, la zone domaine doit exister chez dynv6 et son jeton se trouver dans <racine>/dns.token (600, proprietaire). L'apply fait alors pointer la zone, prod, rec et dev vers la machine, obtient un certificat Let's Encrypt par environnement et planifie leur renouvellement ; sans jeton, chaque environnement garde un certificat auto-signe. Le frontal SNI (infra/front) se demarre une fois depuis le dossier de la prod, make front-up.

Chiffrement au repos (ADR 0020) : coffre_taille = "30G" fait poser par scripts/coffre-luks.sh un coffre LUKS2 sous /var/lib/docker/volumes ; vide par defaut, rien n'est pose. La premiere pose arrete Docker le temps de copier les volumes, et la cle /root/enervision-coffre.key est a sauvegarder hors de la VM.

Retirer le runner se fait a la main, depuis les parametres du depot : terraform destroy ne le desinscrit pas.

Usage (environments/k3s-cible)

cd infra/terraform/environments/k3s-cible
cp terraform.tfvars.example terraform.tfvars   # renseigner ssh_host / ssh_private_key_path
terraform init
terraform apply

Le kubeconfig est ecrit localement au chemin defini par kubeconfig_output_path (par defaut ./kubeconfig, ignore par git).