# đ Workflow de DĂ©ploiement - ThĂ© Tip Top
## đ Vue d'ensemble des environnements
| Environnement | Branche | Base de données | Port DB | URLs |
|---------------|---------|-----------------|---------|------|
| **DEV** | `dev` | `thetiptop_dev` | 5433 | https://dev.dsp5-archi-o24a-15m-g3.fr
https://api.dev.dsp5-archi-o24a-15m-g3.fr |
| **PREPROD** | `preprod` | `thetiptop_preprod` | 5434 | https://preprod.dsp5-archi-o24a-15m-g3.fr
https://api.preprod.dsp5-archi-o24a-15m-g3.fr |
| **PROD** | `main` | `thetiptop` | 5432 | https://dsp5-archi-o24a-15m-g3.fr
https://api.dsp5-archi-o24a-15m-g3.fr |
---
## đ Workflow Git
```
dev â preprod â main
â â â
DEV PREPROD PROD
```
---
## đ ProcĂ©dure de dĂ©ploiement
### 1ïžâŁ **DĂ©veloppement sur DEV**
```bash
# Vous ĂȘtes sur la branche dev
git checkout dev
# Faire vos modifications...
# Commit et push vers dev
git add .
git commit -m "feat: description de la fonctionnalité"
git push origin dev
```
**Déploiement DEV :**
```bash
# Sur le serveur DEV
cd /path/to/backend
git pull origin dev
cp .env.dev .env
npm install
npm run dev
```
---
### 2ïžâŁ **DĂ©ploiement vers PREPROD**
AprÚs avoir testé sur DEV et validé les fonctionnalités :
```bash
# Merger dev vers preprod
git checkout preprod
git pull origin preprod
git merge dev
git push origin preprod
```
**Déploiement PREPROD :**
```bash
# Sur le serveur PREPROD
cd /path/to/backend
git pull origin preprod
cp .env.preprod .env
npm install
npm run dev
```
**â ïž Tests Ă effectuer en PREPROD :**
- [ ] Toutes les fonctionnalités principales
- [ ] Authentification (Google, Facebook)
- [ ] Jeu et attribution des lots
- [ ] Interface admin
- [ ] Tirage au sort
- [ ] Performance et sécurité
---
### 3ïžâŁ **DĂ©ploiement en PRODUCTION**
AprĂšs validation complĂšte en PREPROD :
```bash
# Merger preprod vers main
git checkout main
git pull origin main
git merge preprod
git push origin main
```
**Déploiement PRODUCTION :**
```bash
# Sur le serveur PRODUCTION
cd /path/to/backend
git pull origin main
cp .env.production .env
# â ïž IMPORTANT : VĂ©rifier les secrets en production
nano .env # Vérifier JWT_SECRET, SESSION_SECRET, etc.
npm install
npm run build # Si nécessaire
npm start
```
---
## đïž Gestion des bases de donnĂ©es
### Migration de donnĂ©es DEV â PREPROD
```bash
# Dump de la base DEV
pg_dump -h 51.75.24.29 -p 5433 -U postgres -d thetiptop_dev > dev_dump.sql
# Restaurer en PREPROD
psql -h 51.75.24.29 -p 5434 -U postgres -d thetiptop_preprod < dev_dump.sql
```
### Migration de donnĂ©es PREPROD â PROD
```bash
# Dump de la base PREPROD
pg_dump -h 51.75.24.29 -p 5434 -U postgres -d thetiptop_preprod > preprod_dump.sql
# â ïž BACKUP PROD avant restauration !
pg_dump -h 51.75.24.29 -p 5432 -U postgres -d thetiptop > prod_backup_$(date +%Y%m%d).sql
# Restaurer en PROD
psql -h 51.75.24.29 -p 5432 -U postgres -d thetiptop < preprod_dump.sql
```
---
## đ Configuration des secrets
### Secrets Ă changer ABSOLUMENT en PRODUCTION :
- `JWT_SECRET` - Générer avec : `openssl rand -base64 32`
- `SESSION_SECRET` - Générer avec : `openssl rand -base64 32`
- `NEXTAUTH_SECRET` - Générer avec : `openssl rand -base64 32`
### OAuth en production :
1. **Google OAuth** : Créer un nouveau projet sur Google Cloud Console avec les URLs de prod
2. **Facebook OAuth** : Créer une nouvelle app Facebook avec les URLs de prod
---
## â
Checklist avant déploiement PRODUCTION
- [ ] Tous les tests passent en PREPROD
- [ ] Les secrets ont été changés (JWT, SESSION)
- [ ] OAuth configuré avec les URLs de production
- [ ] Backup de la base de données PROD effectué
- [ ] Variables d'environnement vérifiées
- [ ] CORS configuré avec les domaines de production
- [ ] Logs configurés pour la production
- [ ] Plan de rollback préparé
---
## đš Rollback en cas de problĂšme
### Si problĂšme en PRODUCTION :
```bash
# 1. Revenir à la version précédente
git checkout main
git reset --hard
git push origin main --force
# 2. Restaurer le backup de la base de données
psql -h 51.75.24.29 -p 5432 -U postgres -d thetiptop < prod_backup_YYYYMMDD.sql
# 3. Redémarrer l'application
npm start
```
---
## đ Support
En cas de problÚme, vérifier :
1. Les logs du serveur
2. Les logs de la base de données
3. Les variables d'environnement
4. La configuration CORS
5. Les certificats SSL
---
**DerniĂšre mise Ă jour** : $(date +%Y-%m-%d)