128 lines
3.7 KiB
Markdown
128 lines
3.7 KiB
Markdown
# 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`.
|
|
|
|
## 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.
|