groupe-meditation/docs/91_DEPLOIEMENT_ANSIBLE.md

3.2 KiB

Déploiement Ansible

Statut: procédure supportée
Public: exploitants, sysadmin technique
Dernière révision: 2026-06-01

Ce dépôt peut installer l'application sur une Debian vanille avec un compte ansible sudoer sans mot de passe.

Le playbook installe:

  • dépendances système;
  • PostgreSQL;
  • backend FastAPI;
  • frontend compilé;
  • service systemd;
  • NGINX local;
  • sauvegardes quotidiennes;
  • certificat Let's Encrypt si activé.

Pré-requis poste de contrôle

python3 -m pip install --user ansible
ansible-galaxy collection install -r ansible/requirements.yml
node --version
npm --version

Node.js 20 ou plus récent est recommandé pour construire le frontend.

Accès SSH

L'inventaire référence explicitement la clé:

~/.ssh/id_ed25519_ansible_chezlepro

Préparation type:

ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_ansible_chezlepro -C "ansible@chezlepro"
ssh-copy-id -i ~/.ssh/id_ed25519_ansible_chezlepro.pub ansible@ADRESSE_IP_VM
ssh -i ~/.ssh/id_ed25519_ansible_chezlepro ansible@ADRESSE_IP_VM

Inventaire

Fichier:

ansible/inventory/hosts.yml

Vérifier:

  • ansible_host;
  • ansible_user;
  • ansible_ssh_private_key_file.

Variables

Variables non secrètes:

ansible/group_vars/all.yml

Secrets:

ansible/group_vars/vault.yml

Créer depuis l'exemple:

cp ansible/group_vars/vault.yml.example ansible/group_vars/vault.yml
openssl rand -base64 48
nano ansible/group_vars/vault.yml
ansible-vault encrypt ansible/group_vars/vault.yml

Le fichier de secrets doit contenir au minimum:

  • groupe_meditation_db_password;
  • groupe_meditation_jwt_secret.

Installation

Depuis la racine:

ansible-playbook ansible/site.yml --ask-vault-pass

Si le vault local n'est pas chiffré dans un contexte de développement, l'option --ask-vault-pass peut être omise.

Vérification

ansible-playbook ansible/verify.yml --ask-vault-pass

Vérification directe de l'API:

ansible groupe-meditation-prod -m uri -a 'url=http://127.0.0.1:8000/api/health return_content=true status_code=200' -o

Vérification des groupes publics:

ansible groupe-meditation-prod -m uri -a 'url=http://127.0.0.1:8000/api/auth/groupes return_content=true status_code=200' -o

Initialisation de la base

Le seed ne crée qu'un groupe de démonstration:

  • nom: Groupe Démonstration;
  • compte: sysadmin;
  • PIN initial: 0000;
  • historique fictif crédible.

Le playbook ne relance le seed que si la base est absente ou vide selon les tests du rôle applicatif.

Redéploiement

Le playbook est conçu pour être relancé. Il synchronise le code, reconstruit le frontend, redémarre le service et laisse les données existantes intactes.

Sauvegarde manuelle

ansible-playbook ansible/backup-now.yml --ask-vault-pass

La sauvegarde quotidienne génère une archive globale PostgreSQL et une archive JSON par groupe. Les archives par groupe alimentent le bouton Restaurer du module sysadmin.

NGINX

L'application installe un NGINX local sur la VM. Il sert:

  • le frontend statique;
  • le reverse proxy vers l'API FastAPI locale.

Un proxy externe peut gérer TLS et relayer vers cette VM en HTTP.