groupe-meditation/docs/DEPLOIEMENT.md
2026-03-13 11:46:14 -04:00

6.1 KiB

Guide de déploiement — Groupe Méditation

27 modules · Debian Bookworm + NGINX + PostgreSQL

Testé sur Debian 12 (Bookworm) avec un utilisateur ansible ayant accès sudo.

Principe : on utilise ce que Debian fournit. Pas de dépôt externe.


0. Prérequis système

sudo apt update && sudo apt upgrade -y
sudo apt install -y curl ca-certificates gnupg

1. Installer PostgreSQL

On installe le PostgreSQL fourni par Debian Bookworm (version 15) :

sudo apt install -y postgresql postgresql-client
sudo systemctl enable postgresql
sudo systemctl start postgresql

Créer l'utilisateur et la base :

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

Vérifier :

sudo -u postgres psql -c "SELECT version();"

2. Installer Node.js

On installe le Node.js fourni par Debian Bookworm (version 18) :

sudo apt install -y nodejs npm

Vérifier :

node --version
npm --version

3. Installer Python et les dépendances système

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

4. Installer NGINX

sudo apt install -y nginx
sudo systemctl enable nginx
sudo systemctl start nginx

5. Déployer le code source

# Copier l'archive sur le serveur, puis :
cd ~
tar xzf groupe-meditation-complet.tar.gz

# Backend
sudo mkdir -p /opt/groupe-meditation
sudo cp -r ~/groupe-meditation/backend/ /opt/groupe-meditation/backend/
sudo cp -r ~/groupe-meditation/deploy/ /opt/groupe-meditation/deploy/

# Environnement virtuel Python
cd /opt/groupe-meditation/backend
sudo python3 -m venv venv
sudo /opt/groupe-meditation/backend/venv/bin/pip install -r requirements.txt

6. Configurer le backend

cd /opt/groupe-meditation/backend
sudo cp .env.example .env
sudo nano .env

Modifier .env :

DATABASE_URL=postgresql+asyncpg://grpmed:VOTRE_MOT_DE_PASSE@localhost:5432/groupe_meditation
JWT_SECRET=COLLEZ_ICI_LA_SORTIE_DE_LA_COMMANDE_SUIVANTE
CORS_ORIGINS=["https://groupe-meditation.chezlepro.ca"]
INVITATION_EXPIRE_HOURS=48

Générer le secret JWT :

openssl rand -base64 48

7. Initialiser la base de données (23 tables)

cd /opt/groupe-meditation
sudo /opt/groupe-meditation/backend/venv/bin/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
  • Un code d'invitation valide 7 jours

8. Créer le service systemd

sudo cp /opt/groupe-meditation/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 :

sudo systemctl status groupe-meditation
curl -s http://127.0.0.1:8000/api/health

Doit retourner {"status":"ok","app":"Groupe Méditation","version":"0.1.0"}


9. Construire et déployer le frontend

cd ~/groupe-meditation/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

10. Configurer NGINX

NGINX fait tout : fichiers statiques du frontend + reverse proxy vers FastAPI.

sudo cp ~/groupe-meditation/deploy/nginx-groupe-meditation.conf \
  /etc/nginx/sites-available/groupe-meditation
sudo ln -sf /etc/nginx/sites-available/groupe-meditation /etc/nginx/sites-enabled/

# Retirer le site par défaut si présent
sudo rm -f /etc/nginx/sites-enabled/default

sudo nginx -t
sudo systemctl reload nginx

Tester en HTTP :

curl -s http://groupe-meditation.chezlepro.ca/api/health

11. Certificat TLS (Let's Encrypt)

sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d groupe-meditation.chezlepro.ca

Certbot modifie automatiquement la config NGINX pour ajouter HTTPS et la redirection 80→443.


12. Sauvegarde automatique

sudo cp ~/groupe-meditation/deploy/backup.sh /etc/cron.daily/groupe-meditation-backup
sudo chmod +x /etc/cron.daily/groupe-meditation-backup

13. Vérification finale

# API en HTTPS
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
WeasyPrint échoue sudo apt install libpango-1.0-0 libpangocairo-1.0-0
seed.py ImportError Vérifier les noms de classes dans backend/app/models/

Mise à jour de l'application

# Backend
cd /opt/groupe-meditation/backend
sudo venv/bin/pip install -r requirements.txt
sudo systemctl restart groupe-meditation

# Frontend
cd ~/groupe-meditation/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