Checkpoint: Ajout des scripts de mise à jour pour le serveur VPS :
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
This commit is contained in:
344
deployment-scripts/README.md
Normal file
344
deployment-scripts/README.md
Normal file
@@ -0,0 +1,344 @@
|
||||
# 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)
|
||||
Reference in New Issue
Block a user