Files
Manus Sandbox c0446e5ba8 Checkpoint: Correction du bug "drizzle-kit: not found" lors de la mise à jour :
**Problème identifié** :
Le script `update-app.sh` utilisait `pnpm install --prod` qui n'installe que les dépendances de production, excluant les devDependencies comme `drizzle-kit` nécessaire pour les migrations.

**Solution appliquée** :
1. **update-app.sh** : Changé `pnpm install --prod` en `pnpm install` pour installer toutes les dépendances (production + développement)
2. **GUIDE_MISE_A_JOUR.md** : Mise à jour de la documentation pour refléter ce changement

**Justification** :
`drizzle-kit` est nécessaire pour exécuter `pnpm db:push` qui applique les migrations de base de données. Sans les devDependencies, la commande échoue.

**Nouveau package créé** :
- formation-manager-update-20251127_114306.tar.gz (2.6M)
- Prêt pour déploiement avec la correction
2025-11-27 11:44:55 -05:00
..

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

# 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

# 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)

# 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)

# 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

# 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:

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:

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:

./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:

# 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:

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:

# 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

# Vérifier les permissions
ls -l *.sh

# Rendre exécutable
chmod +x *.sh

Erreur "Permission denied"

# Exécuter avec sudo
sudo ./update-app.sh

Le service ne redémarre pas

# 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

# 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)