From aa85bf43b9ee0fc49bdbd1dc8a5e6fd3ab415c18 Mon Sep 17 00:00:00 2001 From: Manus Sandbox Date: Wed, 3 Dec 2025 04:37:04 -0500 Subject: [PATCH] =?UTF-8?q?Checkpoint:=20Version=20finale=20avec=20scripts?= =?UTF-8?q?=20de=20d=C3=A9ploiement=20pour=20VPS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. --- INSTRUCTIONS-DEPLOIEMENT.md | 234 ++++++++++++++++++++++++++++++++++++ deploy-update.sh | 93 ++++++++++++++ update-database.sql | 44 +++++++ 3 files changed, 371 insertions(+) create mode 100644 INSTRUCTIONS-DEPLOIEMENT.md create mode 100755 deploy-update.sh create mode 100644 update-database.sql diff --git a/INSTRUCTIONS-DEPLOIEMENT.md b/INSTRUCTIONS-DEPLOIEMENT.md new file mode 100644 index 0000000..f4ee331 --- /dev/null +++ b/INSTRUCTIONS-DEPLOIEMENT.md @@ -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 diff --git a/deploy-update.sh b/deploy-update.sh new file mode 100755 index 0000000..59ed616 --- /dev/null +++ b/deploy-update.sh @@ -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 "" diff --git a/update-database.sql b/update-database.sql new file mode 100644 index 0000000..4b87c79 --- /dev/null +++ b/update-database.sql @@ -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 = '

Cher(e) {{prenomApprenant}} {{nomApprenant}},

Votre inscription à la formation {{nomFormation}} (séquence {{nomSequence}}) a bien été enregistrée.

Lieu : {{lieu}}

Dates :

{{datesHTML}}

Vous recevrez prochainement les invitations Outlook pour bloquer votre agenda.

À bientôt !

', + 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 +-- ============================================