Files
formation-manager-itinova/deployment-scripts/update-app.sh
Manus Sandbox 21439c7af1 Checkpoint: Correction des scripts de déploiement pour utiliser le bon nom de répertoire :
**Modifications apportées** :

1. **backup-before-update.sh** :
   - APP_DIR: /var/www/formation-manager-itinova
   - BACKUP_DIR: /var/backups/formation-manager-itinova

2. **update-app.sh** :
   - APP_DIR: /var/www/formation-manager-itinova
   - SERVICE_NAME: formation-manager-itinova

3. **GUIDE_MISE_A_JOUR.md** :
   - Tous les chemins mis à jour vers formation-manager-itinova
   - Tous les noms de service corrigés

4. **README.md** :
   - Documentation mise à jour avec les bons chemins
   - Exemples corrigés

5. **Nouveau package créé** :
   - formation-manager-update-20251127_095935.tar.gz (2.6M)
   - Prêt pour déploiement sur le serveur VPS
2025-11-27 10:01:47 -05:00

179 lines
6.2 KiB
Bash
Executable File

#!/bin/bash
###############################################################################
# Script de mise à jour automatique
# Formation Manager Itinova
#
# Ce script met à jour l'application sur le serveur VPS
###############################################################################
set -e # Arrêter en cas d'erreur
# Couleurs pour les messages
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Configuration
APP_DIR="/var/www/formation-manager-itinova"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
SERVICE_NAME="formation-manager-itinova"
echo -e "${BLUE}╔════════════════════════════════════════════════════════════╗${NC}"
echo -e "${BLUE}║ Mise à jour Formation Manager Itinova ║${NC}"
echo -e "${BLUE}╚════════════════════════════════════════════════════════════╝${NC}"
echo ""
echo "Date: $(date)"
echo "Répertoire: $APP_DIR"
echo ""
# Vérifier que le script est exécuté en tant que root ou avec sudo
if [ "$EUID" -ne 0 ]; then
echo -e "${RED}✗ Ce script doit être exécuté en tant que root ou avec sudo${NC}"
exit 1
fi
# Fonction pour afficher une étape
step() {
echo ""
echo -e "${BLUE}$1${NC}"
echo "────────────────────────────────────────────────────────────"
}
# Fonction pour confirmer
confirm() {
read -p "$(echo -e ${YELLOW}$1 [y/N]: ${NC})" -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
echo -e "${RED}Mise à jour annulée${NC}"
exit 1
fi
}
# 1. Confirmation
confirm "Voulez-vous continuer avec la mise à jour ?"
# 2. Créer une sauvegarde
step "Étape 1/8: Création d'une sauvegarde de sécurité"
if [ -f "$SCRIPT_DIR/backup-before-update.sh" ]; then
bash "$SCRIPT_DIR/backup-before-update.sh"
else
echo -e "${YELLOW}⚠ Script de sauvegarde introuvable, sauvegarde manuelle recommandée${NC}"
confirm "Continuer sans sauvegarde automatique ?"
fi
# 3. Arrêter le service
step "Étape 2/8: Arrêt du service"
if systemctl is-active --quiet $SERVICE_NAME; then
systemctl stop $SERVICE_NAME
echo -e "${GREEN}✓ Service arrêté${NC}"
else
echo -e "${YELLOW}⚠ Service déjà arrêté${NC}"
fi
# 4. Sauvegarder le fichier .env
step "Étape 3/8: Sauvegarde de la configuration"
if [ -f "$APP_DIR/.env" ]; then
cp "$APP_DIR/.env" "/tmp/.env.backup"
echo -e "${GREEN}✓ Configuration sauvegardée dans /tmp/.env.backup${NC}"
else
echo -e "${YELLOW}⚠ Fichier .env introuvable${NC}"
fi
# 5. Copier les nouveaux fichiers
step "Étape 4/8: Copie des nouveaux fichiers"
if [ -d "$SCRIPT_DIR/../" ]; then
# Supprimer les anciens fichiers (sauf .env et node_modules)
cd "$APP_DIR"
find . -mindepth 1 -maxdepth 1 ! -name '.env' ! -name 'node_modules' ! -name '.git' -exec rm -rf {} +
# Copier les nouveaux fichiers
cp -r "$SCRIPT_DIR/../"* "$APP_DIR/"
cp -r "$SCRIPT_DIR/../".* "$APP_DIR/" 2>/dev/null || true
echo -e "${GREEN}✓ Nouveaux fichiers copiés${NC}"
else
echo -e "${RED}✗ Répertoire source introuvable${NC}"
exit 1
fi
# 6. Restaurer le fichier .env
step "Étape 5/8: Restauration de la configuration"
if [ -f "/tmp/.env.backup" ]; then
cp "/tmp/.env.backup" "$APP_DIR/.env"
rm "/tmp/.env.backup"
echo -e "${GREEN}✓ Configuration restaurée${NC}"
else
echo -e "${YELLOW}⚠ Pas de configuration à restaurer${NC}"
fi
# 7. Installer les dépendances
step "Étape 6/8: Installation des dépendances"
cd "$APP_DIR"
# Vérifier si pnpm est installé
if ! command -v pnpm &> /dev/null; then
echo -e "${YELLOW}Installation de pnpm...${NC}"
npm install -g pnpm
fi
echo "Installation des dépendances..."
pnpm install --prod
echo -e "${GREEN}✓ Dépendances installées${NC}"
# 8. Appliquer les migrations de base de données
step "Étape 7/8: Application des migrations de base de données"
echo "Synchronisation du schéma de base de données..."
pnpm db:push
echo -e "${GREEN}✓ Migrations appliquées${NC}"
# 9. Construire l'application
step "Étape 8/8: Construction de l'application"
echo "Construction du client..."
cd "$APP_DIR"
pnpm run build 2>/dev/null || echo -e "${YELLOW}⚠ Pas de build client nécessaire${NC}"
echo -e "${GREEN}✓ Application construite${NC}"
# 10. Définir les permissions correctes
echo ""
echo -e "${YELLOW}Configuration des permissions...${NC}"
chown -R www-data:www-data "$APP_DIR"
chmod -R 755 "$APP_DIR"
chmod 600 "$APP_DIR/.env" 2>/dev/null || true
echo -e "${GREEN}✓ Permissions configurées${NC}"
# 11. Redémarrer le service
echo ""
echo -e "${YELLOW}Redémarrage du service...${NC}"
systemctl start $SERVICE_NAME
sleep 3
# Vérifier que le service a bien démarré
if systemctl is-active --quiet $SERVICE_NAME; then
echo -e "${GREEN}✓ Service démarré avec succès${NC}"
else
echo -e "${RED}✗ Erreur lors du démarrage du service${NC}"
echo "Vérifier les logs avec: sudo journalctl -u $SERVICE_NAME -n 50"
exit 1
fi
# 12. Vérifier le statut
echo ""
systemctl status $SERVICE_NAME --no-pager
# Résumé final
echo ""
echo -e "${BLUE}╔════════════════════════════════════════════════════════════╗${NC}"
echo -e "${BLUE}${GREEN}Mise à jour terminée avec succès !${BLUE}${NC}"
echo -e "${BLUE}╚════════════════════════════════════════════════════════════╝${NC}"
echo ""
echo -e "${GREEN}L'application est maintenant à jour et en cours d'exécution.${NC}"
echo ""
echo "Commandes utiles:"
echo " • Voir les logs: sudo journalctl -u $SERVICE_NAME -f"
echo " • Redémarrer: sudo systemctl restart $SERVICE_NAME"
echo " • Statut: sudo systemctl status $SERVICE_NAME"
echo ""