groupe-meditation/docs/DEPLOIEMENT.md

199 lines
4.9 KiB
Markdown
Raw Normal View History

2026-03-04 14:01:00 -05:00
# Guide de déploiement — Groupe Méditation
2026-03-13 01:28:06 -04:00
## 27 modules · Phases 0 à 9 · Infrastructure Debian + NGINX + PostgreSQL
2026-03-04 14:01:00 -05:00
---
## Prérequis
- Debian 12+ ou Ubuntu 24.04+
- PostgreSQL 16+
- Python 3.11+
- Node.js 20+ (pour le build frontend)
2026-03-13 01:28:06 -04:00
- NGINX 1.24+
2026-03-04 14:01:00 -05:00
- Certbot (Let's Encrypt)
---
## 1. Installer PostgreSQL
```bash
sudo apt update
sudo apt install -y postgresql-16 postgresql-client-16
sudo systemctl enable postgresql
sudo systemctl start postgresql
sudo -u postgres psql << 'SQL'
CREATE USER grpmed WITH PASSWORD 'CHANGEZ_CE_MOT_DE_PASSE';
CREATE DATABASE groupe_meditation OWNER grpmed;
GRANT ALL PRIVILEGES ON DATABASE groupe_meditation TO grpmed;
\c groupe_meditation
GRANT ALL ON SCHEMA public TO grpmed;
SQL
```
## 2. Installer Python et les dépendances
```bash
sudo apt install -y python3 python3-pip python3-venv
# Dépendances système pour WeasyPrint (rapports PDF)
sudo apt install -y libpango-1.0-0 libpangocairo-1.0-0 libgdk-pixbuf2.0-0 libffi-dev libcairo2
sudo mkdir -p /opt/groupe-meditation
sudo chown $USER:$USER /opt/groupe-meditation
cp -r backend/ /opt/groupe-meditation/backend/
cp -r deploy/ /opt/groupe-meditation/deploy/
cd /opt/groupe-meditation/backend
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
```
## 3. Configurer le backend
```bash
cd /opt/groupe-meditation/backend
cp .env.example .env
nano .env
```
Modifier `.env` :
```
DATABASE_URL=postgresql+asyncpg://grpmed:VOTRE_MOT_DE_PASSE@localhost:5432/groupe_meditation
JWT_SECRET=GENEREZ_AVEC_openssl_rand_base64_48
CORS_ORIGINS=["https://groupe-meditation.chezlepro.ca"]
INVITATION_EXPIRE_HOURS=48
```
Générer le secret JWT :
```bash
openssl rand -base64 48
```
## 4. Initialiser la base de données (23 tables)
```bash
cd /opt/groupe-meditation
source backend/venv/bin/activate
python deploy/seed.py
```
Le script crée **interactivement** :
2026-03-13 01:28:06 -04:00
- Les 23 tables
- Les 10 postes prédéfinis
2026-03-04 14:01:00 -05:00
- La répartition par défaut des contributions (30/30/30/10)
2026-03-13 01:28:06 -04:00
- La littérature de base (5 titres)
2026-03-04 14:01:00 -05:00
- Le premier groupe et le premier membre avec son poste
- Un code d'invitation valide 7 jours
## 5. Créer le service systemd
```bash
sudo cp deploy/groupe-meditation.service /etc/systemd/system/
sudo chown -R www-data:www-data /opt/groupe-meditation
sudo systemctl daemon-reload
sudo systemctl enable groupe-meditation
sudo systemctl start groupe-meditation
# Vérifier
curl http://127.0.0.1:8000/api/health
```
## 6. Construire le frontend
```bash
cd frontend/
npm install
npm run build
sudo mkdir -p /var/www/groupe-meditation
sudo cp -r dist/* /var/www/groupe-meditation/
sudo chown -R www-data:www-data /var/www/groupe-meditation
```
2026-03-13 01:28:06 -04:00
## 7. Configurer NGINX
2026-03-04 14:01:00 -05:00
2026-03-13 01:28:06 -04:00
NGINX fait tout : servir les fichiers statiques du frontend ET proxy vers FastAPI. Pas besoin d'Apache.
2026-03-04 14:01:00 -05:00
```bash
sudo cp deploy/nginx-groupe-meditation.conf /etc/nginx/sites-available/groupe-meditation
sudo ln -s /etc/nginx/sites-available/groupe-meditation /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
2026-03-13 01:28:06 -04:00
# Certificat TLS
sudo certbot --nginx -d groupe-meditation.chezlepro.ca
2026-03-04 14:01:00 -05:00
```
2026-03-13 01:28:06 -04:00
NGINX sert :
- `/api/*` → reverse proxy vers FastAPI (Uvicorn port 8000)
- `/*` → fichiers statiques du build React (SPA routing via `try_files`)
- Cache 1 an sur les assets (JS, CSS, images), pas de cache sur index.html
2026-03-04 14:01:00 -05:00
2026-03-13 01:28:06 -04:00
## 8. Sauvegarde automatique
2026-03-04 14:01:00 -05:00
```bash
sudo cp deploy/backup.sh /etc/cron.daily/groupe-meditation-backup
sudo chmod +x /etc/cron.daily/groupe-meditation-backup
```
- pg_dump quotidien en format custom (-Fc)
- Rétention 30 jours
- **Test de restauration mensuel recommandé** :
```bash
pg_restore -U grpmed -d groupe_meditation_test /var/backups/groupe-meditation/grpmed_DERNIER.dump
```
2026-03-13 01:28:06 -04:00
## 9. Vérification finale
2026-03-04 14:01:00 -05:00
```bash
# API
curl -s https://groupe-meditation.chezlepro.ca/api/health | python3 -m json.tool
# Documentation OpenAPI
# Ouvrir https://groupe-meditation.chezlepro.ca/api/docs
# Frontend
# Ouvrir https://groupe-meditation.chezlepro.ca
# Se connecter avec le prénom et le PIN créés lors du seed
```
---
## Dépannage
| Problème | Commande |
|----------|----------|
| API ne démarre pas | `sudo journalctl -u groupe-meditation -f` |
| Erreur base de données | `sudo -u postgres psql -d groupe_meditation -c "SELECT count(*) FROM groupes;"` |
| NGINX 502 | `sudo systemctl status groupe-meditation` (vérifier que FastAPI tourne) |
| WeasyPrint échoue | `sudo apt install libpango-1.0-0 libpangocairo-1.0-0` |
| Mise à jour frontend | `cd frontend && npm run build && sudo cp -r dist/* /var/www/groupe-meditation/` |
| Mise à jour backend | `sudo systemctl restart groupe-meditation` |
## Mise à jour de l'application
```bash
# Backend
cd /opt/groupe-meditation/backend
source venv/bin/activate
pip install -r requirements.txt
sudo systemctl restart groupe-meditation
# Frontend
cd frontend
npm install
npm run build
sudo cp -r dist/* /var/www/groupe-meditation/
```
---
**Hébergé au Québec · 100% logiciel libre · Zéro traçage · 23 tables · 25 routers · 27 modules**