# Guide de Mise à Jour - Formation Manager Itinova

## 📋 Vue d'ensemble

Ce guide explique comment mettre à jour l'application Formation Manager Itinova sur votre serveur VPS.

## ⚠️ Avant de commencer

### Prérequis

- Accès SSH au serveur VPS
- Droits sudo/root
- L'application doit être déjà installée et fonctionnelle
- Connexion à la base de données MySQL/TiDB

### Informations importantes

- **Temps d'arrêt estimé**: 5-10 minutes
- **Sauvegarde automatique**: Oui (10 dernières sauvegardes conservées)
- **Rollback possible**: Oui (via les sauvegardes)

## 🚀 Méthode 1: Mise à jour automatique (Recommandée)

### Étape 1: Télécharger les fichiers de mise à jour

Téléchargez le package de mise à jour depuis Manus et transférez-le sur votre serveur:

```bash
# Sur votre machine locale
scp formation-manager-update.tar.gz user@votre-serveur:/tmp/

# Ou utilisez SFTP/WinSCP pour transférer le fichier
```

### Étape 2: Extraire le package

```bash
# Se connecter au serveur
ssh user@votre-serveur

# Extraire le package
cd /tmp
tar -xzf formation-manager-update.tar.gz
cd formation-manager-itinova
```

### Étape 3: Rendre les scripts exécutables

```bash
chmod +x deployment-scripts/*.sh
```

### Étape 4: Lancer la mise à jour

```bash
sudo ./deployment-scripts/update-app.sh
```

Le script va automatiquement:
1. ✅ Créer une sauvegarde complète
2. ✅ Arrêter le service
3. ✅ Sauvegarder la configuration (.env)
4. ✅ Copier les nouveaux fichiers
5. ✅ Restaurer la configuration
6. ✅ Installer les dépendances
7. ✅ Appliquer les migrations de base de données
8. ✅ Construire l'application
9. ✅ Redémarrer le service

### Étape 5: Vérifier le bon fonctionnement

```bash
# Vérifier le statut du service
sudo systemctl status formation-manager-itinova

# Voir les logs en temps réel
sudo journalctl -u formation-manager-itinova -f

# Tester l'application dans le navigateur
# Ouvrir: http://votre-domaine.com
```

## 🔧 Méthode 2: Mise à jour manuelle

Si vous préférez contrôler chaque étape:

### 1. Créer une sauvegarde

```bash
sudo ./deployment-scripts/backup-before-update.sh
```

### 2. Arrêter le service

```bash
sudo systemctl stop formation-manager-itinova
```

### 3. Sauvegarder la configuration

```bash
sudo cp /var/www/formation-manager-itinova/.env /tmp/.env.backup
```

### 4. Copier les nouveaux fichiers

```bash
cd /var/www/formation-manager-itinova
sudo find . -mindepth 1 -maxdepth 1 ! -name '.env' ! -name 'node_modules' -exec rm -rf {} +
sudo cp -r /tmp/formation-manager-itinova/* .
```

### 5. Restaurer la configuration

```bash
sudo cp /tmp/.env.backup /var/www/formation-manager-itinova/.env
```

### 6. Installer les dépendances

```bash
cd /var/www/formation-manager-itinova
sudo pnpm install
```

### 7. Appliquer les migrations

```bash
sudo pnpm db:push
```

### 8. Redémarrer le service

```bash
sudo systemctl start formation-manager-itinova
sudo systemctl status formation-manager-itinova
```

## 🔄 Restauration d'une sauvegarde (Rollback)

Si la mise à jour pose problème, vous pouvez restaurer une sauvegarde:

### 1. Lister les sauvegardes disponibles

```bash
ls -lh /var/backups/formation-manager-itinova/
```

### 2. Choisir une sauvegarde

```bash
# Exemple: backup_20240119_143022
BACKUP_DIR="/var/backups/formation-manager-itinova/backup_20240119_143022"
```

### 3. Arrêter le service

```bash
sudo systemctl stop formation-manager-itinova
```

### 4. Restaurer les fichiers

```bash
cd /var/www/formation-manager-itinova
sudo rm -rf *
sudo tar -xzf $BACKUP_DIR/app_files.tar.gz -C .
```

### 5. Restaurer la configuration

```bash
sudo cp $BACKUP_DIR/.env.backup /var/www/formation-manager-itinova/.env
```

### 6. Restaurer la base de données (optionnel)

```bash
# Extraire le dump SQL
gunzip -c $BACKUP_DIR/database.sql.gz > /tmp/restore.sql

# Restaurer dans MySQL
mysql -h HOST -u USER -p DATABASE < /tmp/restore.sql

# Nettoyer
rm /tmp/restore.sql
```

### 7. Redémarrer le service

```bash
sudo systemctl start formation-manager-itinova
sudo systemctl status formation-manager-itinova
```

## 📝 Nouveautés de cette version

### Corrections de bugs
- ✅ **Décalage horaire**: Les heures s'affichent maintenant correctement dans le formulaire d'édition des séquences (9h00 reste 9h00)
- ✅ **Menu navigation**: Ajout du menu latéral sur la page Import Excel

### Améliorations
- ✅ **Réorganisation**: Menu "Import Excel" déplacé dans la section Configuration pour une meilleure organisation

### Migrations de base de données
Aucune migration majeure dans cette version. Le script `pnpm db:push` synchronisera automatiquement le schéma.

## 🆘 Résolution de problèmes

### Le service ne démarre pas

```bash
# Voir les logs d'erreur
sudo journalctl -u formation-manager-itinova -n 100 --no-pager

# Vérifier les permissions
sudo chown -R www-data:www-data /var/www/formation-manager-itinova
sudo chmod -R 755 /var/www/formation-manager-itinova
sudo chmod 600 /var/www/formation-manager-itinova/.env
```

### Erreur de connexion à la base de données

```bash
# Vérifier le fichier .env
sudo cat /var/www/formation-manager-itinova/.env | grep DATABASE_URL

# Tester la connexion MySQL
mysql -h HOST -u USER -p -e "SELECT 1;"
```

### Port déjà utilisé

```bash
# Voir quel processus utilise le port 3000
sudo lsof -i :3000

# Tuer le processus si nécessaire
sudo kill -9 PID
```

### Problème de permissions

```bash
# Réinitialiser les permissions
cd /var/www/formation-manager-itinova
sudo chown -R www-data:www-data .
sudo chmod -R 755 .
sudo chmod 600 .env
```

## 📞 Support

En cas de problème:

1. **Vérifier les logs**: `sudo journalctl -u formation-manager-itinova -f`
2. **Consulter la documentation**: Voir les guides dans `/var/www/formation-manager-itinova/deployment-package/`
3. **Restaurer une sauvegarde**: Suivre la procédure de rollback ci-dessus

## ✅ Checklist post-mise à jour

- [ ] Le service est démarré: `sudo systemctl status formation-manager-itinova`
- [ ] L'application est accessible dans le navigateur
- [ ] La connexion fonctionne (test avec un utilisateur admin)
- [ ] Les séquences s'affichent correctement
- [ ] Le formulaire d'édition affiche les bonnes heures
- [ ] Le menu Import Excel est dans la section Configuration
- [ ] Les emails de confirmation fonctionnent (test d'inscription)

## 📊 Commandes utiles

```bash
# Voir les logs en temps réel
sudo journalctl -u formation-manager-itinova -f

# Redémarrer le service
sudo systemctl restart formation-manager-itinova

# Voir le statut
sudo systemctl status formation-manager-itinova

# Voir les dernières erreurs
sudo journalctl -u formation-manager-itinova -p err -n 50

# Espace disque
df -h

# Utilisation mémoire
free -h

# Processus Node.js
ps aux | grep node
```

---

**Date de création**: $(date +%Y-%m-%d)  
**Version**: 36474438
