147 lines
3.2 KiB
Markdown
147 lines
3.2 KiB
Markdown
# 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
|
|
ansible app-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:
|
|
|
|
```bash
|
|
ansible app-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
|
|
|
|
```bash
|
|
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.
|