# 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 ``` Par defaut, le domaine est `groupe-meditation.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 curl -s http://groupe-meditation.87-16.org/api/health ssh ansible@groupe-meditation.87-16.org 'sudo systemctl status groupe-meditation --no-pager' ssh ansible@groupe-meditation.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`. ## 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.