2026-05-31 23:57:49 -04:00
# 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
```bash
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é:
```bash
~/.ssh/id_ed25519_ansible_chezlepro
```
Préparation type:
```bash
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:
```bash
ansible/inventory/hosts.yml
```
Vérifier:
- `ansible_host` ;
- `ansible_user` ;
- `ansible_ssh_private_key_file` .
## Variables
Variables non secrètes:
```bash
ansible/group_vars/all.yml
```
Secrets:
```bash
ansible/group_vars/vault.yml
```
Créer depuis l'exemple:
```bash
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:
```bash
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
```bash
ansible-playbook ansible/verify.yml --ask-vault-pass
```
Vérification directe de l'API:
```bash
2026-06-01 09:16:37 -04:00
ansible app-prod -m uri -a 'url=http://127.0.0.1:8000/api/health return_content=true status_code=200' -o
2026-05-31 23:57:49 -04:00
```
Vérification des groupes publics:
```bash
2026-06-01 09:16:37 -04:00
ansible app-prod -m uri -a 'url=http://127.0.0.1:8000/api/auth/groupes return_content=true status_code=200' -o
2026-05-31 23:57:49 -04:00
```
## 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
```bash
ansible-playbook ansible/backup-now.yml --ask-vault-pass
```
2026-06-01 07:40:30 -04:00
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.
2026-05-31 23:57:49 -04:00
## 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.