# Scripts de Déploiement - Formation Manager Itinova ## 📁 Contenu du répertoire Ce répertoire contient tous les scripts nécessaires pour mettre à jour l'application sur votre serveur VPS. ### Scripts disponibles | Script | Description | Usage | |--------|-------------|-------| | `backup-before-update.sh` | Crée une sauvegarde complète avant mise à jour | `sudo ./backup-before-update.sh` | | `update-app.sh` | Met à jour automatiquement l'application | `sudo ./update-app.sh` | | `create-deployment-package.sh` | Crée un package de déploiement | `./create-deployment-package.sh` | ### Documentation | Fichier | Description | |---------|-------------| | `GUIDE_MISE_A_JOUR.md` | Guide complet de mise à jour avec instructions détaillées | | `README.md` | Ce fichier | ## 🚀 Utilisation rapide ### Pour mettre à jour l'application sur le serveur ```bash # 1. Rendre les scripts exécutables (une seule fois) chmod +x *.sh # 2. Lancer la mise à jour automatique sudo ./update-app.sh ``` ### Pour créer un package de déploiement ```bash # Créer un package prêt à transférer ./create-deployment-package.sh # Le package sera créé dans le répertoire parent # Nom: formation-manager-update-YYYYMMDD_HHMMSS.tar.gz ``` ## 📋 Workflow de mise à jour complet ### 1. Préparation (sur votre machine locale) ```bash # Créer le package de déploiement cd formation-manager-itinova/deployment-scripts ./create-deployment-package.sh # Transférer sur le serveur scp ../formation-manager-update-*.tar.gz user@serveur:/tmp/ ``` ### 2. Installation (sur le serveur) ```bash # Se connecter au serveur ssh user@serveur # Extraire le package cd /tmp tar -xzf formation-manager-update-*.tar.gz cd formation-manager-itinova # Rendre les scripts exécutables chmod +x deployment-scripts/*.sh # Lancer la mise à jour sudo ./deployment-scripts/update-app.sh ``` ### 3. Vérification ```bash # Vérifier le statut sudo systemctl status formation-manager-itinova # Voir les logs sudo journalctl -u formation-manager-itinova -f # Tester dans le navigateur # Ouvrir: http://votre-domaine.com ``` ## 🔧 Détails des scripts ### backup-before-update.sh **Fonction**: Crée une sauvegarde complète de l'application et de la base de données **Ce qu'il fait**: - Sauvegarde tous les fichiers de l'application dans une archive .tar.gz - Sauvegarde le fichier .env - Exporte la base de données MySQL en SQL compressé - Crée un fichier d'information sur la sauvegarde - Conserve les 10 dernières sauvegardes (supprime les plus anciennes) **Emplacement des sauvegardes**: `/var/backups/formation-manager-itinova/` **Exemple d'utilisation**: ```bash sudo ./backup-before-update.sh ``` **Sortie**: ``` === Sauvegarde avant mise à jour === Date: 2024-01-19 14:30:22 Répertoire application: /var/www/formation-manager-itinova Répertoire sauvegarde: /var/backups/formation-manager-itinova Création du répertoire de sauvegarde... Sauvegarde des fichiers de l'application... ✓ Fichiers de l'application sauvegardés ... === Sauvegarde terminée avec succès === Emplacement: /var/backups/formation-manager-itinova/backup_20240119_143022 Taille: 45M ``` ### update-app.sh **Fonction**: Met à jour automatiquement l'application sur le serveur **Ce qu'il fait**: 1. Crée une sauvegarde de sécurité 2. Arrête le service 3. Sauvegarde la configuration (.env) 4. Copie les nouveaux fichiers 5. Restaure la configuration 6. Installe les dépendances (pnpm install) 7. Applique les migrations de base de données (pnpm db:push) 8. Construit l'application 9. Configure les permissions 10. Redémarre le service 11. Vérifie le bon fonctionnement **Prérequis**: - Exécuter avec sudo/root - L'application doit être installée dans `/var/www/formation-manager-itinova` - Le service doit s'appeler `formation-manager-itinova` **Exemple d'utilisation**: ```bash sudo ./update-app.sh ``` **Sortie**: ``` ╔════════════════════════════════════════════════════════════╗ ║ Mise à jour Formation Manager Itinova ║ ╚════════════════════════════════════════════════════════════╝ Date: 2024-01-19 14:35:10 Répertoire: /var/www/formation-manager-itinova Voulez-vous continuer avec la mise à jour ? [y/N]: y ▶ Étape 1/8: Création d'une sauvegarde de sécurité ──────────────────────────────────────────────────────────── ... ╔════════════════════════════════════════════════════════════╗ ║ Mise à jour terminée avec succès ! ║ ╚════════════════════════════════════════════════════════════╝ ``` ### create-deployment-package.sh **Fonction**: Crée un package de déploiement prêt à transférer **Ce qu'il fait**: - Copie tous les fichiers nécessaires (sauf node_modules, .git, .env) - Inclut les scripts de déploiement - Crée un fichier README_DEPLOIEMENT.txt avec les instructions - Crée une archive .tar.gz compressée **Exemple d'utilisation**: ```bash ./create-deployment-package.sh ``` **Sortie**: ``` ╔════════════════════════════════════════════════════════════╗ ║ Création du package de déploiement ║ ╚════════════════════════════════════════════════════════════╝ Nettoyage du répertoire temporaire... Création du répertoire temporaire... Copie des fichiers du projet... ✓ Fichiers copiés Création du fichier README... ✓ README créé Création de l'archive... ╔════════════════════════════════════════════════════════════╗ ║ Package créé avec succès ! ║ ╚════════════════════════════════════════════════════════════╝ Fichier: formation-manager-update-20240119_143522.tar.gz Emplacement: /home/ubuntu/formation-manager-itinova/formation-manager-update-20240119_143522.tar.gz Taille: 2.3M Prochaines étapes: 1. Transférer le package sur le serveur: scp formation-manager-update-20240119_143522.tar.gz user@serveur:/tmp/ 2. Suivre les instructions dans README_DEPLOIEMENT.txt ``` ## 🔄 Restauration d'une sauvegarde Si vous devez restaurer une sauvegarde après une mise à jour problématique: ```bash # 1. Lister les sauvegardes ls -lh /var/backups/formation-manager-itinova/ # 2. Arrêter le service sudo systemctl stop formation-manager-itinova # 3. Restaurer les fichiers cd /var/www/formation-manager-itinova sudo rm -rf * sudo tar -xzf /var/backups/formation-manager-itinova/backup_YYYYMMDD_HHMMSS/app_files.tar.gz -C . # 4. Restaurer .env sudo cp /var/backups/formation-manager-itinova/backup_YYYYMMDD_HHMMSS/.env.backup .env # 5. Restaurer la base de données (si nécessaire) gunzip -c /var/backups/formation-manager-itinova/backup_YYYYMMDD_HHMMSS/database.sql.gz | mysql -h HOST -u USER -p DATABASE # 6. Redémarrer sudo systemctl start formation-manager-itinova ``` ## 📝 Configuration ### Chemins par défaut Les scripts utilisent ces chemins par défaut: ```bash APP_DIR="/var/www/formation-manager-itinova" # Répertoire de l'application BACKUP_DIR="/var/backups/formation-manager-itinova" # Répertoire des sauvegardes SERVICE_NAME="formation-manager-itinova" # Nom du service systemd ``` ### Personnalisation Pour modifier ces chemins, éditez les variables au début de chaque script: ```bash # Ouvrir le script nano update-app.sh # Modifier les variables APP_DIR="/votre/chemin/personnalisé" BACKUP_DIR="/votre/chemin/sauvegardes" SERVICE_NAME="votre-service" ``` ## ⚠️ Notes importantes ### Permissions - Les scripts de mise à jour doivent être exécutés avec `sudo` - Les scripts de création de package peuvent être exécutés en utilisateur normal - Après mise à jour, les fichiers appartiennent à `www-data:www-data` ### Sauvegardes - Les sauvegardes sont conservées dans `/var/backups/formation-manager-itinova/` - Seules les 10 dernières sauvegardes sont conservées - Chaque sauvegarde inclut: fichiers + .env + base de données - Pensez à sauvegarder régulièrement les sauvegardes importantes ailleurs ### Base de données - Les migrations sont appliquées automatiquement avec `pnpm db:push` - La base de données est sauvegardée avant chaque mise à jour - En cas de problème, restaurez la base depuis la sauvegarde ### Temps d'arrêt - Le service est arrêté pendant la mise à jour (5-10 minutes) - Planifiez la mise à jour pendant une période de faible activité - Prévenez les utilisateurs à l'avance ## 🆘 Dépannage ### Le script ne s'exécute pas ```bash # Vérifier les permissions ls -l *.sh # Rendre exécutable chmod +x *.sh ``` ### Erreur "Permission denied" ```bash # Exécuter avec sudo sudo ./update-app.sh ``` ### Le service ne redémarre pas ```bash # Voir les logs sudo journalctl -u formation-manager-itinova -n 100 # Vérifier la configuration sudo systemctl status formation-manager-itinova # Vérifier les permissions sudo chown -R www-data:www-data /var/www/formation-manager-itinova ``` ### Erreur de base de données ```bash # Vérifier la connexion mysql -h HOST -u USER -p -e "SELECT 1;" # Vérifier le fichier .env cat /var/www/formation-manager-itinova/.env | grep DATABASE_URL ``` ## 📞 Support Pour plus d'informations, consultez: - **Guide complet**: `GUIDE_MISE_A_JOUR.md` - **Documentation de déploiement**: `../deployment-package/` --- **Version**: 36474438 **Dernière mise à jour**: $(date +%Y-%m-%d)