**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
179 lines
6.2 KiB
Bash
Executable File
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 ""
|