Checkpoint: Version finale avec scripts de déploiement pour VPS
Contenu de cette version :
1. Corrections de bugs :
- Bug d'inscription (procédure publique createPublic)
- Bug email de confirmation (variables {{prenomApprenant}} et {{datesHTML}})
- Amélioration interface templates d'emails
2. Scripts de déploiement VPS :
- deploy-update.sh : Script automatique de mise à jour
- update-database.sql : Script SQL de mise à jour de la base
- INSTRUCTIONS-DEPLOIEMENT.md : Documentation complète
Le script deploy-update.sh gère automatiquement :
- Sauvegarde de la base de données
- Arrêt/redémarrage du serveur
- Récupération du code
- Installation des dépendances
- Migrations de base de données
- Compilation du projet
Prêt pour le déploiement en production.
This commit is contained in:
234
INSTRUCTIONS-DEPLOIEMENT.md
Normal file
234
INSTRUCTIONS-DEPLOIEMENT.md
Normal file
@@ -0,0 +1,234 @@
|
|||||||
|
# Instructions de déploiement - Formation Manager Itinova
|
||||||
|
|
||||||
|
Version: **d0d9d870**
|
||||||
|
Date: 3 janvier 2025
|
||||||
|
|
||||||
|
## 📋 Résumé des modifications
|
||||||
|
|
||||||
|
Cette mise à jour contient les corrections suivantes :
|
||||||
|
|
||||||
|
1. **Bug d'inscription - Mauvais apprenant associé**
|
||||||
|
- Création d'une procédure publique `apprenants.createPublic`
|
||||||
|
- Les inscriptions depuis la page publique fonctionnent correctement
|
||||||
|
|
||||||
|
2. **Bug email de confirmation - Variables non remplacées**
|
||||||
|
- Correction du template d'inscription dans la base de données
|
||||||
|
- Ajout de la variable `{{datesHTML}}` dans l'objet variables
|
||||||
|
- Toutes les variables sont maintenant correctement remplacées
|
||||||
|
|
||||||
|
3. **Amélioration de l'interface des templates d'emails**
|
||||||
|
- Ajout du bouton `{{datesHTML}}` dans l'éditeur
|
||||||
|
- Prévisualisation améliorée avec exemple de dates formatées
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🚀 Déploiement automatique (recommandé)
|
||||||
|
|
||||||
|
### Prérequis
|
||||||
|
- Accès SSH au serveur VPS
|
||||||
|
- Git configuré avec accès au dépôt
|
||||||
|
- PM2 installé pour la gestion du processus
|
||||||
|
- pnpm installé
|
||||||
|
|
||||||
|
### Étapes
|
||||||
|
|
||||||
|
1. **Se connecter au serveur VPS**
|
||||||
|
```bash
|
||||||
|
ssh votre-utilisateur@votre-serveur.com
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Aller dans le répertoire du projet**
|
||||||
|
```bash
|
||||||
|
cd /chemin/vers/formation-manager-itinova
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Rendre le script exécutable**
|
||||||
|
```bash
|
||||||
|
chmod +x deploy-update.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
4. **Exécuter le script de mise à jour**
|
||||||
|
```bash
|
||||||
|
./deploy-update.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
Le script va automatiquement :
|
||||||
|
- ✅ Sauvegarder la base de données
|
||||||
|
- ✅ Arrêter le serveur
|
||||||
|
- ✅ Récupérer les dernières modifications
|
||||||
|
- ✅ Installer les dépendances
|
||||||
|
- ✅ Appliquer les migrations
|
||||||
|
- ✅ Compiler le projet
|
||||||
|
- ✅ Redémarrer le serveur
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔧 Déploiement manuel
|
||||||
|
|
||||||
|
Si vous préférez effectuer la mise à jour manuellement :
|
||||||
|
|
||||||
|
### 1. Sauvegarde de la base de données
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Créer un répertoire de backup
|
||||||
|
mkdir -p backups
|
||||||
|
|
||||||
|
# Sauvegarder la base de données
|
||||||
|
mysqldump -h VOTRE_HOST -u VOTRE_USER -p VOTRE_DATABASE > backups/db-backup-$(date +%Y%m%d-%H%M%S).sql
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Arrêter le serveur
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pm2 stop formation-manager
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. Récupérer les modifications
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git fetch origin
|
||||||
|
git checkout main
|
||||||
|
git pull origin main
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. Installer les dépendances
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pnpm install
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5. Appliquer les migrations de base de données
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pnpm db:push
|
||||||
|
```
|
||||||
|
|
||||||
|
**OU** appliquer manuellement le script SQL :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mysql -h VOTRE_HOST -u VOTRE_USER -p VOTRE_DATABASE < update-database.sql
|
||||||
|
```
|
||||||
|
|
||||||
|
### 6. Compiler le projet
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pnpm build
|
||||||
|
```
|
||||||
|
|
||||||
|
### 7. Redémarrer le serveur
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pm2 restart formation-manager
|
||||||
|
# OU si c'est le premier démarrage :
|
||||||
|
pm2 start npm --name "formation-manager" -- start
|
||||||
|
```
|
||||||
|
|
||||||
|
### 8. Vérifier le statut
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pm2 status formation-manager
|
||||||
|
pm2 logs formation-manager --lines 50
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🧪 Tests après déploiement
|
||||||
|
|
||||||
|
Après le déploiement, vérifiez que tout fonctionne correctement :
|
||||||
|
|
||||||
|
### 1. Test d'inscription publique
|
||||||
|
- [ ] Aller sur la page d'inscription publique d'une formation
|
||||||
|
- [ ] Créer une nouvelle inscription avec un nouvel apprenant
|
||||||
|
- [ ] Vérifier que l'apprenant est correctement créé dans la base de données
|
||||||
|
- [ ] Vérifier que l'inscription est associée au bon apprenant
|
||||||
|
|
||||||
|
### 2. Test de l'email de confirmation
|
||||||
|
- [ ] Effectuer une inscription
|
||||||
|
- [ ] Vérifier la réception de l'email de confirmation
|
||||||
|
- [ ] Vérifier que toutes les variables sont remplacées (notamment `{{prenomApprenant}}` et `{{datesHTML}}`)
|
||||||
|
- [ ] Vérifier que les invitations ICS sont jointes (une par date)
|
||||||
|
|
||||||
|
### 3. Test de l'interface des templates
|
||||||
|
- [ ] Aller dans Configuration > Templates d'emails
|
||||||
|
- [ ] Vérifier que le bouton "Dates (HTML)" est présent
|
||||||
|
- [ ] Cliquer sur le bouton pour insérer `{{datesHTML}}`
|
||||||
|
- [ ] Vérifier la prévisualisation
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📊 Vérification de la base de données
|
||||||
|
|
||||||
|
Pour vérifier que la mise à jour du template d'inscription a été appliquée :
|
||||||
|
|
||||||
|
```sql
|
||||||
|
SELECT
|
||||||
|
type,
|
||||||
|
name,
|
||||||
|
bodyContent,
|
||||||
|
updatedAt
|
||||||
|
FROM emailTemplates
|
||||||
|
WHERE type = 'inscription';
|
||||||
|
```
|
||||||
|
|
||||||
|
Le `bodyContent` doit contenir les variables `{{prenomApprenant}}`, `{{nomApprenant}}`, et `{{datesHTML}}`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔄 Rollback (en cas de problème)
|
||||||
|
|
||||||
|
Si vous rencontrez des problèmes après la mise à jour :
|
||||||
|
|
||||||
|
### 1. Restaurer la base de données
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Lister les sauvegardes disponibles
|
||||||
|
ls -lh backups/
|
||||||
|
|
||||||
|
# Restaurer une sauvegarde
|
||||||
|
mysql -h VOTRE_HOST -u VOTRE_USER -p VOTRE_DATABASE < backups/db-backup-YYYYMMDD-HHMMSS.sql
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Revenir à la version précédente du code
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Voir l'historique des commits
|
||||||
|
git log --oneline
|
||||||
|
|
||||||
|
# Revenir au commit précédent
|
||||||
|
git checkout COMMIT_HASH
|
||||||
|
|
||||||
|
# Réinstaller les dépendances
|
||||||
|
pnpm install
|
||||||
|
|
||||||
|
# Recompiler
|
||||||
|
pnpm build
|
||||||
|
|
||||||
|
# Redémarrer
|
||||||
|
pm2 restart formation-manager
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📞 Support
|
||||||
|
|
||||||
|
En cas de problème lors du déploiement :
|
||||||
|
|
||||||
|
1. Consulter les logs du serveur : `pm2 logs formation-manager`
|
||||||
|
2. Vérifier l'état du serveur : `pm2 status`
|
||||||
|
3. Vérifier les logs de la base de données
|
||||||
|
4. Contacter le support technique
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📝 Notes importantes
|
||||||
|
|
||||||
|
- **Sauvegarde automatique** : Le script `deploy-update.sh` crée automatiquement une sauvegarde de la base de données avant toute modification
|
||||||
|
- **Temps d'arrêt** : Le déploiement nécessite un arrêt temporaire du serveur (environ 2-3 minutes)
|
||||||
|
- **Variables d'environnement** : Assurez-vous que toutes les variables d'environnement nécessaires sont correctement configurées (DATABASE_URL, RESEND_API_KEY, etc.)
|
||||||
|
- **Permissions** : Le script doit être exécuté avec les permissions appropriées pour accéder à la base de données et redémarrer PM2
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Version du checkpoint** : d0d9d870
|
||||||
|
**Date de création** : 3 janvier 2025
|
||||||
|
**Auteur** : Manus AI
|
||||||
93
deploy-update.sh
Executable file
93
deploy-update.sh
Executable file
@@ -0,0 +1,93 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Script de mise à jour pour le serveur VPS
|
||||||
|
# Formation Manager Itinova
|
||||||
|
# Version: d0d9d870
|
||||||
|
|
||||||
|
set -e # Arrêter en cas d'erreur
|
||||||
|
|
||||||
|
echo "========================================="
|
||||||
|
echo "Mise à jour Formation Manager Itinova"
|
||||||
|
echo "========================================="
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Couleurs pour les messages
|
||||||
|
GREEN='\033[0;32m'
|
||||||
|
YELLOW='\033[1;33m'
|
||||||
|
RED='\033[0;31m'
|
||||||
|
NC='\033[0m' # No Color
|
||||||
|
|
||||||
|
# Vérifier que nous sommes dans le bon répertoire
|
||||||
|
if [ ! -f "package.json" ]; then
|
||||||
|
echo -e "${RED}Erreur: package.json non trouvé. Êtes-vous dans le bon répertoire ?${NC}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -e "${YELLOW}1. Sauvegarde de la base de données...${NC}"
|
||||||
|
# Créer un répertoire de backup s'il n'existe pas
|
||||||
|
mkdir -p backups
|
||||||
|
BACKUP_FILE="backups/db-backup-$(date +%Y%m%d-%H%M%S).sql"
|
||||||
|
|
||||||
|
# Extraire les informations de connexion depuis DATABASE_URL
|
||||||
|
# Format: mysql://user:password@host:port/database
|
||||||
|
if [ -z "$DATABASE_URL" ]; then
|
||||||
|
echo -e "${RED}Erreur: DATABASE_URL n'est pas définie${NC}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Parser DATABASE_URL
|
||||||
|
DB_USER=$(echo $DATABASE_URL | sed -n 's/.*:\/\/\([^:]*\):.*/\1/p')
|
||||||
|
DB_PASS=$(echo $DATABASE_URL | sed -n 's/.*:\/\/[^:]*:\([^@]*\)@.*/\1/p')
|
||||||
|
DB_HOST=$(echo $DATABASE_URL | sed -n 's/.*@\([^:]*\):.*/\1/p')
|
||||||
|
DB_PORT=$(echo $DATABASE_URL | sed -n 's/.*:\([0-9]*\)\/.*/\1/p')
|
||||||
|
DB_NAME=$(echo $DATABASE_URL | sed -n 's/.*\/\([^?]*\).*/\1/p')
|
||||||
|
|
||||||
|
echo "Sauvegarde de la base de données $DB_NAME..."
|
||||||
|
mysqldump -h "$DB_HOST" -P "$DB_PORT" -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" > "$BACKUP_FILE"
|
||||||
|
echo -e "${GREEN}✓ Sauvegarde créée: $BACKUP_FILE${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
echo -e "${YELLOW}2. Arrêt du serveur...${NC}"
|
||||||
|
pm2 stop formation-manager || echo "Le serveur n'était pas démarré"
|
||||||
|
echo -e "${GREEN}✓ Serveur arrêté${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
echo -e "${YELLOW}3. Récupération des dernières modifications...${NC}"
|
||||||
|
git fetch origin
|
||||||
|
git checkout main
|
||||||
|
git pull origin main
|
||||||
|
echo -e "${GREEN}✓ Code mis à jour${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
echo -e "${YELLOW}4. Installation des dépendances...${NC}"
|
||||||
|
pnpm install
|
||||||
|
echo -e "${GREEN}✓ Dépendances installées${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
echo -e "${YELLOW}5. Application des migrations de base de données...${NC}"
|
||||||
|
pnpm db:push
|
||||||
|
echo -e "${GREEN}✓ Migrations appliquées${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
echo -e "${YELLOW}6. Compilation du projet...${NC}"
|
||||||
|
pnpm build
|
||||||
|
echo -e "${GREEN}✓ Projet compilé${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
echo -e "${YELLOW}7. Redémarrage du serveur...${NC}"
|
||||||
|
pm2 restart formation-manager || pm2 start npm --name "formation-manager" -- start
|
||||||
|
echo -e "${GREEN}✓ Serveur redémarré${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
echo -e "${YELLOW}8. Vérification du statut...${NC}"
|
||||||
|
pm2 status formation-manager
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
echo -e "${GREEN}=========================================${NC}"
|
||||||
|
echo -e "${GREEN}Mise à jour terminée avec succès !${NC}"
|
||||||
|
echo -e "${GREEN}=========================================${NC}"
|
||||||
|
echo ""
|
||||||
|
echo "Sauvegarde de la base de données: $BACKUP_FILE"
|
||||||
|
echo "Pour consulter les logs: pm2 logs formation-manager"
|
||||||
|
echo "Pour arrêter le serveur: pm2 stop formation-manager"
|
||||||
|
echo ""
|
||||||
44
update-database.sql
Normal file
44
update-database.sql
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
-- Script de mise à jour de la base de données
|
||||||
|
-- Formation Manager Itinova
|
||||||
|
-- Version: d0d9d870
|
||||||
|
-- Date: 2025-01-03
|
||||||
|
|
||||||
|
-- Ce script contient les modifications de la base de données nécessaires
|
||||||
|
-- pour cette version
|
||||||
|
|
||||||
|
-- ============================================
|
||||||
|
-- Mise à jour du template d'inscription
|
||||||
|
-- ============================================
|
||||||
|
|
||||||
|
-- Mettre à jour le bodyContent du template d'inscription
|
||||||
|
-- pour utiliser les bonnes variables
|
||||||
|
UPDATE emailTemplates
|
||||||
|
SET bodyContent = '<p>Cher(e) {{prenomApprenant}} {{nomApprenant}},</p><p>Votre inscription à la formation <strong>{{nomFormation}}</strong> (séquence <strong>{{nomSequence}}</strong>) a bien été enregistrée.</p><p><strong>Lieu :</strong> {{lieu}}</p><p><strong>Dates :</strong></p>{{datesHTML}}<p>Vous recevrez prochainement les invitations Outlook pour bloquer votre agenda.</p><p>À bientôt !</p>',
|
||||||
|
updatedAt = NOW()
|
||||||
|
WHERE type = 'inscription';
|
||||||
|
|
||||||
|
-- Vérifier que la mise à jour a été effectuée
|
||||||
|
SELECT
|
||||||
|
type,
|
||||||
|
name,
|
||||||
|
SUBSTRING(bodyContent, 1, 100) as bodyContent_preview,
|
||||||
|
updatedAt
|
||||||
|
FROM emailTemplates
|
||||||
|
WHERE type = 'inscription';
|
||||||
|
|
||||||
|
-- ============================================
|
||||||
|
-- Notes importantes
|
||||||
|
-- ============================================
|
||||||
|
|
||||||
|
-- 1. La procédure publique apprenants.createPublic a été ajoutée dans le code
|
||||||
|
-- (pas de modification SQL nécessaire, c'est une procédure tRPC)
|
||||||
|
|
||||||
|
-- 2. La variable {{datesHTML}} est maintenant disponible dans tous les templates
|
||||||
|
-- d'emails pour afficher la liste formatée des dates
|
||||||
|
|
||||||
|
-- 3. Les invitations ICS sont générées automatiquement pour chaque date
|
||||||
|
-- de la séquence lors de l'envoi de l'email de confirmation
|
||||||
|
|
||||||
|
-- ============================================
|
||||||
|
-- Fin du script
|
||||||
|
-- ============================================
|
||||||
Reference in New Issue
Block a user