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