Files
formation-manager-itinova/deploy-to-vps.sh
Manus f9983adada Checkpoint: Correction du bug d'émargement formateur bloqué sur la saisie d'email
- Ajout de la détection automatique formateur/apprenant dans EmargementScan.tsx
- Nouvelle procédure tRPC getSequenceByToken pour récupérer les infos de séquence
- Interface adaptée selon le type d'utilisateur (apprenant ou formateur)
- Déploiement réussi sur le VPS de production

Le système détecte maintenant automatiquement si l'email correspond à un apprenant ou un formateur, et affiche l'interface appropriée pour chaque cas.
2026-02-02 14:18:46 -05:00

186 lines
5.9 KiB
Bash
Executable File

#!/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