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
- Modifier l'inventaire:
nano ansible/inventory/hosts.yml
Remplacer ansible_host par l'adresse de la machine Debian si elle change.
- 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_passwordgroupe_meditation_jwt_secretgroupe_meditation_first_member
- 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.
.envbackend 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/etansible/group_vars/vault.ymlsont ignores par Git.- La sauvegarde Ansible injecte
PGPASSWORDdans le script cron root pour que le dump PostgreSQL fonctionne en mode non interactif. - Le seed utilise le script existant
deploy/seed.pyet lui fournit les valeurs configurees dans Ansible.