# Guide de déploiement — Groupe Méditation ## 27 modules · Phases 0 à 9 · Infrastructure Debian + NGINX + PostgreSQL --- ## Prérequis - Debian 12+ ou Ubuntu 24.04+ - PostgreSQL 16+ - Python 3.11+ - Node.js 20+ (pour le build frontend) - NGINX 1.24+ - 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** : - Les 23 tables - Les 10 postes prédéfinis - La répartition par défaut des contributions (30/30/30/10) - La littérature de base (5 titres) - 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 ``` ## 7. Configurer NGINX NGINX fait tout : servir les fichiers statiques du frontend ET proxy vers FastAPI. Pas besoin d'Apache. ```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 # Certificat TLS sudo certbot --nginx -d groupe-meditation.chezlepro.ca ``` 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 ## 8. Sauvegarde automatique ```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 ``` ## 9. Vérification finale ```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**