- 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.
186 lines
5.9 KiB
Bash
Executable File
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
|