groupe-meditation/docs/ANSIBLE.md

3.6 KiB

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

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:

~/.ssh/id_ed25519_ansible_chezlepro

Pour preparer l'acces SSH:

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:
nano ansible/inventory/hosts.yml

Remplacer ansible_host par l'adresse de la machine Debian si elle change.

  1. Creer le fichier de secrets:
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
  1. Ajuster les variables non secretes au besoin:
nano ansible/group_vars/all.yml

Par defaut, le domaine est app.87-16.org.

Installation

Depuis la racine du depot:

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:

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:

groupe_meditation_enable_tls: true
groupe_meditation_certbot_email: vous@example.com

Relancer ensuite:

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

Verification

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.

Documents liés

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.