groupe-meditation/docs/ANSIBLE.md

129 lines
3.6 KiB
Markdown
Raw Normal View History

# Deploiement Ansible
Ce depot peut installer l'application complete sur une Debian vanille avec un compte `ansible` sudoer sans mot de passe.
Le playbook installe PostgreSQL, Node.js, Python, NGINX, le backend FastAPI, le frontend Vite compile, le service systemd, les sauvegardes quotidiennes et, optionnellement, le certificat Let's Encrypt.
## Prerequis cote poste de controle
```bash
python3 -m pip install --user ansible
ansible-galaxy collection install -r ansible/requirements.yml
node --version # Node.js 20 recommande pour construire le frontend PWA
npm --version
```
Le serveur cible doit etre joignable en SSH avec l'utilisateur `ansible`.
L'inventaire utilise explicitement cette cle locale:
```bash
~/.ssh/id_ed25519_ansible_chezlepro
```
Pour preparer l'acces SSH:
```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
```
## Configuration
1. Modifier l'inventaire:
```bash
nano ansible/inventory/hosts.yml
```
Remplacer `ansible_host` par l'adresse de la machine Debian si elle change.
2. Creer le fichier de secrets:
```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 chiffre doit contenir au minimum:
- `groupe_meditation_db_password`
- `groupe_meditation_jwt_secret`
- `groupe_meditation_first_member`
3. Ajuster les variables non secretes au besoin:
```bash
nano ansible/group_vars/all.yml
```
2026-05-31 17:13:04 -04:00
Par defaut, le domaine est `app.87-16.org`.
## Installation
Depuis la racine du depot:
```bash
ansible-playbook ansible/site.yml --ask-vault-pass
```
Le playbook est concu pour etre relance. Il ne relance le seed que si la table `groupes` est absente ou vide.
Playbooks utiles:
```bash
ansible-playbook ansible/verify.yml --ask-vault-pass
ansible-playbook ansible/backup-now.yml --ask-vault-pass
```
## TLS
Laissez d'abord `groupe_meditation_enable_tls: false`, pointez le DNS vers la machine, puis activez:
```yaml
groupe_meditation_enable_tls: true
groupe_meditation_certbot_email: vous@example.com
```
Relancer ensuite:
```bash
ansible-playbook ansible/site.yml --ask-vault-pass
```
## Verification
```bash
2026-05-31 17:13:04 -04:00
curl -s http://app.87-16.org/api/health
ssh ansible@app.87-16.org 'sudo systemctl status groupe-meditation --no-pager'
ssh ansible@app.87-16.org 'sudo journalctl -u groupe-meditation -n 100 --no-pager'
```
## Ce que le playbook gere
- Paquets Debian requis.
- PostgreSQL local avec utilisateur et base applicatifs.
- `.env` backend avec permissions restrictives.
- Copie du code depuis ce depot vers `/opt/groupe-meditation`.
- Environnement virtuel Python et dependances backend.
- Installation npm et build frontend sur le poste de controle, puis publication de `dist/` sur la VM.
- Publication des fichiers statiques dans `/var/www/groupe-meditation`.
- Service systemd `groupe-meditation`.
- Site NGINX reverse proxy + SPA.
- Sauvegarde quotidienne dans `/var/backups/groupe-meditation`.
2026-05-25 17:39:38 -04:00
## Documents liés
- [Architecture technique](ARCHITECTURE.md)
- [Runbook d'exploitation](RUNBOOK.md)
- [Guide utilisateur](UTILISATEURS.md)
## Notes importantes
- Le playbook ne modifie pas le code applicatif.
- `node_modules/`, `dist/` et `ansible/group_vars/vault.yml` sont ignores par Git.
- La sauvegarde Ansible injecte `PGPASSWORD` dans le script cron root pour que le dump PostgreSQL fonctionne en mode non interactif.
- Le seed utilise le script existant `deploy/seed.py` et lui fournit les valeurs configurees dans Ansible.