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.
This commit is contained in:
185
deploy-to-vps.sh
Executable file
185
deploy-to-vps.sh
Executable file
@@ -0,0 +1,185 @@
|
||||
#!/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
|
||||
Reference in New Issue
Block a user