#!/bin/bash ############################################################################### # Script de déploiement automatisé vers le VPS # Formation Manager Itinova - Émargement Formateur # Version: e8410230 ############################################################################### set -e # Configuration VPS VPS_HOST="98.71.216.234" VPS_USER="adminServFormation" VPS_PASSWORD="admin_Itinova69!##" VPS_PATH="/var/www/formation-manager-itinova" ARCHIVE_NAME="formation-manager-update-$(date +%Y%m%d-%H%M%S).tar.gz" # Couleurs GREEN='\033[0;32m' YELLOW='\033[1;33m' RED='\033[0;31m' NC='\033[0m' log_info() { echo -e "${GREEN}[INFO]${NC} $1" } log_warn() { echo -e "${YELLOW}[WARN]${NC} $1" } log_error() { echo -e "${RED}[ERROR]${NC} $1" } echo "╔════════════════════════════════════════════════════════════════╗" echo "║ Déploiement automatisé - Formation Manager Itinova ║" echo "║ Émargement Formateur par QR Code ║" echo "╚════════════════════════════════════════════════════════════════╝" echo "" # 1. Créer l'archive log_info "Création de l'archive de déploiement..." cd /home/ubuntu/formation-manager-itinova tar --exclude='node_modules' \ --exclude='.git' \ --exclude='dist' \ --exclude='backups' \ --exclude='uploads' \ --exclude='*.log' \ --exclude='screenshots' \ -czf "/tmp/${ARCHIVE_NAME}" . log_info "Archive créée: /tmp/${ARCHIVE_NAME}" echo "" # 2. Transférer l'archive vers le VPS log_info "Transfert de l'archive vers le VPS..." sshpass -p "${VPS_PASSWORD}" scp -o StrictHostKeyChecking=no \ "/tmp/${ARCHIVE_NAME}" \ "${VPS_USER}@${VPS_HOST}:/tmp/" log_info "Archive transférée avec succès" echo "" # 3. Exécuter le déploiement sur le VPS log_info "Exécution du déploiement sur le VPS..." sshpass -p "${VPS_PASSWORD}" ssh -o StrictHostKeyChecking=no \ "${VPS_USER}@${VPS_HOST}" << ENDSSH set -e echo "=========================================" echo "Déploiement sur le VPS" echo "=========================================" echo "" # Charger les variables d'environnement cd ${VPS_PATH} if [ -f .env ]; then export \$(grep -v '^#' .env | xargs) fi # 1. Sauvegarde de la base de données echo "1. Sauvegarde de la base de données..." mkdir -p backups BACKUP_FILE="backups/db-backup-\$(date +%Y%m%d-%H%M%S).sql" if [ ! -z "\$DATABASE_URL" ]; then 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') mysqldump -h "\$DB_HOST" -P "\$DB_PORT" -u "\$DB_USER" -p"\$DB_PASS" "\$DB_NAME" > "\$BACKUP_FILE" 2>/dev/null || true echo "✓ Sauvegarde créée: \$BACKUP_FILE" else echo "⚠ DATABASE_URL non définie, sauvegarde ignorée" fi echo "" # 2. Arrêt du serveur echo "2. Arrêt du serveur PM2..." pm2 stop formation-manager-itinova 2>/dev/null || echo "Le serveur n'était pas démarré" echo "✓ Serveur arrêté" echo "" # 3. Sauvegarde de l'ancien code echo "3. Sauvegarde de l'ancien code..." if [ -d "${VPS_PATH}.backup" ]; then rm -rf "${VPS_PATH}.backup" fi cp -r ${VPS_PATH} ${VPS_PATH}.backup echo "✓ Ancien code sauvegardé dans ${VPS_PATH}.backup" echo "" # 4. Extraction de la nouvelle version echo "4. Extraction de la nouvelle version..." cd ${VPS_PATH} tar -xzf /tmp/${ARCHIVE_NAME} rm -f /tmp/${ARCHIVE_NAME} echo "✓ Nouvelle version extraite" echo "" # 5. Installation des dépendances echo "5. Installation des dépendances..." pnpm install --frozen-lockfile 2>&1 | tail -5 echo "✓ Dépendances installées" echo "" # 6. Application des migrations echo "6. Application des migrations de base de données..." pnpm db:push 2>&1 | tail -10 echo "✓ Migrations appliquées (typeUtilisateur et formateurId ajoutés)" echo "" # 7. Build de l'application echo "7. Build de l'application..." pnpm build 2>&1 | tail -5 echo "✓ Application compilée" echo "" # 8. Redémarrage du serveur echo "8. Redémarrage du serveur PM2..." pm2 restart formation-manager-itinova 2>/dev/null || pm2 start npm --name "formation-manager-itinova" -- start sleep 3 echo "✓ Serveur redémarré" echo "" # 9. Vérification du statut echo "9. Vérification du statut..." pm2 list | grep formation-manager-itinova echo "" echo "=========================================" echo "✓ Déploiement terminé avec succès !" echo "=========================================" echo "" echo "Application accessible sur: https://formations.itinova.org" echo "Logs: pm2 logs formation-manager-itinova" echo "" ENDSSH echo "" log_info "╔════════════════════════════════════════════════════════════════╗" log_info "║ Déploiement terminé avec succès! ✓ ║" log_info "╚════════════════════════════════════════════════════════════════╝" echo "" log_info "L'émargement formateur par QR code est maintenant actif sur:" log_info "https://formations.itinova.org" echo "" log_info "Fonctionnalités déployées:" echo " • Détection automatique formateur/apprenant via email" echo " • Signature tactile pour les formateurs" echo " • Intégration des signatures formateur dans le PDF" echo " • QR code accessible dans l'espace formateur" echo "" # Nettoyage rm -f "/tmp/${ARCHIVE_NAME}" exit 0