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:
132
deployment-scripts/backup-before-update.sh
Executable file
132
deployment-scripts/backup-before-update.sh
Executable file
@@ -0,0 +1,132 @@
|
||||
#!/bin/bash
|
||||
|
||||
###############################################################################
|
||||
# Script de sauvegarde avant mise à jour
|
||||
# Formation Manager Itinova
|
||||
#
|
||||
# Ce script crée une sauvegarde complète de l'application et de la base de données
|
||||
# avant d'effectuer une mise à jour
|
||||
###############################################################################
|
||||
|
||||
set -e # Arrêter en cas d'erreur
|
||||
|
||||
# Couleurs pour les messages
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Configuration
|
||||
APP_DIR="/var/www/formation-manager"
|
||||
BACKUP_DIR="/var/backups/formation-manager"
|
||||
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
|
||||
BACKUP_NAME="backup_${TIMESTAMP}"
|
||||
|
||||
echo -e "${GREEN}=== Sauvegarde avant mise à jour ===${NC}"
|
||||
echo "Date: $(date)"
|
||||
echo "Répertoire application: $APP_DIR"
|
||||
echo "Répertoire sauvegarde: $BACKUP_DIR"
|
||||
echo ""
|
||||
|
||||
# Créer le répertoire de sauvegarde s'il n'existe pas
|
||||
echo -e "${YELLOW}Création du répertoire de sauvegarde...${NC}"
|
||||
mkdir -p "$BACKUP_DIR/$BACKUP_NAME"
|
||||
|
||||
# 1. Sauvegarder les fichiers de l'application
|
||||
echo -e "${YELLOW}Sauvegarde des fichiers de l'application...${NC}"
|
||||
if [ -d "$APP_DIR" ]; then
|
||||
tar -czf "$BACKUP_DIR/$BACKUP_NAME/app_files.tar.gz" -C "$APP_DIR" .
|
||||
echo -e "${GREEN}✓ Fichiers de l'application sauvegardés${NC}"
|
||||
else
|
||||
echo -e "${RED}✗ Répertoire application introuvable: $APP_DIR${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 2. Sauvegarder le fichier .env
|
||||
echo -e "${YELLOW}Sauvegarde du fichier .env...${NC}"
|
||||
if [ -f "$APP_DIR/.env" ]; then
|
||||
cp "$APP_DIR/.env" "$BACKUP_DIR/$BACKUP_NAME/.env.backup"
|
||||
echo -e "${GREEN}✓ Fichier .env sauvegardé${NC}"
|
||||
else
|
||||
echo -e "${YELLOW}⚠ Fichier .env introuvable (peut être normal)${NC}"
|
||||
fi
|
||||
|
||||
# 3. Sauvegarder la base de données MySQL
|
||||
echo -e "${YELLOW}Sauvegarde de la base de données...${NC}"
|
||||
|
||||
# Lire les informations de connexion depuis .env
|
||||
if [ -f "$APP_DIR/.env" ]; then
|
||||
# Extraire l'URL de la base de données
|
||||
DB_URL=$(grep "^DATABASE_URL=" "$APP_DIR/.env" | cut -d '=' -f2- | tr -d '"' | tr -d "'")
|
||||
|
||||
if [ -n "$DB_URL" ]; then
|
||||
# Parser l'URL de connexion MySQL
|
||||
# Format: mysql://user:password@host:port/database
|
||||
DB_USER=$(echo $DB_URL | sed -n 's/.*:\/\/\([^:]*\):.*/\1/p')
|
||||
DB_PASS=$(echo $DB_URL | sed -n 's/.*:\/\/[^:]*:\([^@]*\)@.*/\1/p')
|
||||
DB_HOST=$(echo $DB_URL | sed -n 's/.*@\([^:\/]*\).*/\1/p')
|
||||
DB_NAME=$(echo $DB_URL | sed -n 's/.*\/\([^?]*\).*/\1/p')
|
||||
DB_PORT=$(echo $DB_URL | sed -n 's/.*:\([0-9]*\)\/.*/\1/p')
|
||||
|
||||
# Port par défaut si non spécifié
|
||||
if [ -z "$DB_PORT" ]; then
|
||||
DB_PORT="3306"
|
||||
fi
|
||||
|
||||
echo "Base de données: $DB_NAME sur $DB_HOST:$DB_PORT"
|
||||
|
||||
# Exporter la base de données
|
||||
mysqldump -h "$DB_HOST" -P "$DB_PORT" -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" > "$BACKUP_DIR/$BACKUP_NAME/database.sql"
|
||||
|
||||
# Compresser le dump SQL
|
||||
gzip "$BACKUP_DIR/$BACKUP_NAME/database.sql"
|
||||
|
||||
echo -e "${GREEN}✓ Base de données sauvegardée${NC}"
|
||||
else
|
||||
echo -e "${YELLOW}⚠ DATABASE_URL non trouvée dans .env${NC}"
|
||||
fi
|
||||
else
|
||||
echo -e "${YELLOW}⚠ Impossible de sauvegarder la base de données (fichier .env introuvable)${NC}"
|
||||
fi
|
||||
|
||||
# 4. Créer un fichier d'information sur la sauvegarde
|
||||
echo -e "${YELLOW}Création du fichier d'information...${NC}"
|
||||
cat > "$BACKUP_DIR/$BACKUP_NAME/backup_info.txt" << EOF
|
||||
Sauvegarde Formation Manager Itinova
|
||||
====================================
|
||||
|
||||
Date de création: $(date)
|
||||
Timestamp: $TIMESTAMP
|
||||
Répertoire source: $APP_DIR
|
||||
|
||||
Contenu de la sauvegarde:
|
||||
- app_files.tar.gz: Tous les fichiers de l'application
|
||||
- .env.backup: Fichier de configuration (si présent)
|
||||
- database.sql.gz: Dump de la base de données MySQL (si disponible)
|
||||
|
||||
Pour restaurer cette sauvegarde:
|
||||
1. Arrêter le service: sudo systemctl stop formation-manager
|
||||
2. Extraire les fichiers: tar -xzf app_files.tar.gz -C $APP_DIR
|
||||
3. Restaurer .env: cp .env.backup $APP_DIR/.env
|
||||
4. Restaurer la base: gunzip -c database.sql.gz | mysql -u USER -p DATABASE
|
||||
5. Redémarrer: sudo systemctl start formation-manager
|
||||
EOF
|
||||
|
||||
echo -e "${GREEN}✓ Fichier d'information créé${NC}"
|
||||
|
||||
# 5. Calculer la taille de la sauvegarde
|
||||
BACKUP_SIZE=$(du -sh "$BACKUP_DIR/$BACKUP_NAME" | cut -f1)
|
||||
echo ""
|
||||
echo -e "${GREEN}=== Sauvegarde terminée avec succès ===${NC}"
|
||||
echo "Emplacement: $BACKUP_DIR/$BACKUP_NAME"
|
||||
echo "Taille: $BACKUP_SIZE"
|
||||
echo ""
|
||||
|
||||
# 6. Nettoyer les anciennes sauvegardes (garder les 10 dernières)
|
||||
echo -e "${YELLOW}Nettoyage des anciennes sauvegardes...${NC}"
|
||||
cd "$BACKUP_DIR"
|
||||
ls -t | tail -n +11 | xargs -r rm -rf
|
||||
echo -e "${GREEN}✓ Anciennes sauvegardes nettoyées (conservation des 10 dernières)${NC}"
|
||||
|
||||
echo ""
|
||||
echo -e "${GREEN}Sauvegarde prête pour la mise à jour !${NC}"
|
||||
Reference in New Issue
Block a user