1. **backup-before-update.sh** : Script de sauvegarde automatique - Sauvegarde complète des fichiers de l'application - Export de la base de données MySQL - Sauvegarde du fichier .env - Conservation des 10 dernières sauvegardes 2. **update-app.sh** : Script de mise à jour automatique - Création d'une sauvegarde de sécurité - Arrêt/redémarrage du service - Copie des nouveaux fichiers - Installation des dépendances - Application des migrations de base de données - Vérification du bon fonctionnement 3. **create-deployment-package.sh** : Script de création de package - Crée une archive .tar.gz prête à transférer - Inclut tous les fichiers nécessaires - Exclut node_modules, .git, .env 4. **Documentation complète** : - GUIDE_MISE_A_JOUR.md : Guide détaillé avec procédures de mise à jour et rollback - README.md : Documentation des scripts avec exemples d'utilisation 5. **Package de déploiement créé** : - formation-manager-update-20251127_074417.tar.gz (2.6M) - Prêt à être transféré sur le serveur VPS
345 lines
10 KiB
Markdown
345 lines
10 KiB
Markdown
# 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
|
|
|
|
# Voir les logs
|
|
sudo journalctl -u formation-manager -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/`
|
|
|
|
**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
|
|
Répertoire sauvegarde: /var/backups/formation-manager
|
|
|
|
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/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`
|
|
- Le service doit s'appeler `formation-manager`
|
|
|
|
**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
|
|
|
|
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/
|
|
|
|
# 2. Arrêter le service
|
|
sudo systemctl stop formation-manager
|
|
|
|
# 3. Restaurer les fichiers
|
|
cd /var/www/formation-manager
|
|
sudo rm -rf *
|
|
sudo tar -xzf /var/backups/formation-manager/backup_YYYYMMDD_HHMMSS/app_files.tar.gz -C .
|
|
|
|
# 4. Restaurer .env
|
|
sudo cp /var/backups/formation-manager/backup_YYYYMMDD_HHMMSS/.env.backup .env
|
|
|
|
# 5. Restaurer la base de données (si nécessaire)
|
|
gunzip -c /var/backups/formation-manager/backup_YYYYMMDD_HHMMSS/database.sql.gz | mysql -h HOST -u USER -p DATABASE
|
|
|
|
# 6. Redémarrer
|
|
sudo systemctl start formation-manager
|
|
```
|
|
|
|
## 📝 Configuration
|
|
|
|
### Chemins par défaut
|
|
|
|
Les scripts utilisent ces chemins par défaut:
|
|
|
|
```bash
|
|
APP_DIR="/var/www/formation-manager" # Répertoire de l'application
|
|
BACKUP_DIR="/var/backups/formation-manager" # Répertoire des sauvegardes
|
|
SERVICE_NAME="formation-manager" # 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/`
|
|
- 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 -n 100
|
|
|
|
# Vérifier la configuration
|
|
sudo systemctl status formation-manager
|
|
|
|
# Vérifier les permissions
|
|
sudo chown -R www-data:www-data /var/www/formation-manager
|
|
```
|
|
|
|
### 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/.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)
|