From 228c0e00563e5478cb9c35201e300afa4e01c5d5 Mon Sep 17 00:00:00 2001 From: Manus Sandbox Date: Wed, 3 Dec 2025 05:30:10 -0500 Subject: [PATCH] =?UTF-8?q?Checkpoint:=20Version=20finale=20avec=20guide?= =?UTF-8?q?=20et=20script=20de=20d=C3=A9ploiement=20tar.gz?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ajout du workflow tar.gz (méthode habituelle du client) : 1. DEPLOIEMENT-TARGZ.md : - Guide complet pour créer l'archive .tar.gz - Instructions de transfert via SFTP/SCP - Procédure de mise à jour simplifiée 2. deploy-update-targz.sh : - Script automatique pour mise à jour via archive - Sauvegarde automatique de la BDD - Extraction et copie des fichiers - Installation dépendances + migrations + build - Redémarrage automatique du serveur - Usage: ./deploy-update-targz.sh /tmp/archive.tar.gz Le client peut maintenant utiliser son workflow habituel : - Télécharger depuis Manus - Créer archive .tar.gz - Transférer sur VPS - Lancer le script de mise à jour Toutes les corrections de bugs précédentes sont incluses. --- DEPLOIEMENT-TARGZ.md | 106 +++++++++++++++++++++++++++++++++++++++++ deploy-update-targz.sh | 57 ++++++++++++++++++++++ 2 files changed, 163 insertions(+) create mode 100644 DEPLOIEMENT-TARGZ.md create mode 100755 deploy-update-targz.sh diff --git a/DEPLOIEMENT-TARGZ.md b/DEPLOIEMENT-TARGZ.md new file mode 100644 index 0000000..910c872 --- /dev/null +++ b/DEPLOIEMENT-TARGZ.md @@ -0,0 +1,106 @@ +# Guide de déploiement avec archive .tar.gz + +Ce guide est adapté à votre workflow habituel avec des archives .tar.gz. + +--- + +## 📦 Étape 1 : Créer l'archive .tar.gz + +### Sur votre machine locale (après téléchargement depuis Manus) + +```bash +# Aller dans le dossier parent +cd /d/ProjetsGit + +# Créer l'archive (exclure les dossiers inutiles) +tar -czf formation-manager-itinova.tar.gz \ + --exclude='node_modules' \ + --exclude='dist' \ + --exclude='build' \ + --exclude='.env' \ + --exclude='backups' \ + formation-manager-itinova/ +``` + +**Sur Windows (si tar n'est pas disponible)**, utilisez 7-Zip : +1. Clic droit sur le dossier `formation-manager-itinova` +2. 7-Zip → Ajouter à l'archive +3. Format : tar +4. Niveau de compression : Ultra +5. OK + +Ensuite compresser le .tar en .gz : +1. Clic droit sur `formation-manager-itinova.tar` +2. 7-Zip → Ajouter à l'archive +3. Format : gzip +4. OK + +--- + +## 📤 Étape 2 : Transférer l'archive sur le VPS + +### Avec FileZilla/WinSCP + +1. Se connecter au VPS +2. Naviguer vers `/tmp/` ou `/home/votre-utilisateur/` +3. Transférer `formation-manager-itinova.tar.gz` + +### Avec SCP (ligne de commande) + +```bash +scp formation-manager-itinova.tar.gz votre-utilisateur@votre-serveur.com:/tmp/ +``` + +--- + +## 🚀 Étape 3 : Exécuter le script de mise à jour + +### Se connecter en SSH + +```bash +ssh votre-utilisateur@votre-serveur.com +``` + +### Lancer le script de mise à jour + +```bash +cd /var/www/formation-manager-itinova +./deploy-update-targz.sh /tmp/formation-manager-itinova.tar.gz +``` + +Le script va automatiquement : +- ✅ Sauvegarder la base de données +- ✅ Arrêter le serveur +- ✅ Extraire l'archive +- ✅ Copier les nouveaux fichiers (en préservant .env) +- ✅ Installer les dépendances +- ✅ Appliquer les migrations +- ✅ Recompiler le projet +- ✅ Redémarrer le serveur + +--- + +## 🔍 Vérification + +```bash +# Voir le statut +pm2 status + +# Voir les logs +pm2 logs formation-manager --lines 50 +``` + +--- + +## 📝 Résumé de la procédure + +1. **Télécharger** les fichiers depuis Manus (Code → Download all files) +2. **Créer** l'archive .tar.gz +3. **Transférer** l'archive sur le VPS (dans /tmp/) +4. **Se connecter** en SSH au VPS +5. **Exécuter** `./deploy-update-targz.sh /tmp/formation-manager-itinova.tar.gz` +6. **Vérifier** avec `pm2 status` et `pm2 logs` + +--- + +**C'est tout ! 🚀** diff --git a/deploy-update-targz.sh b/deploy-update-targz.sh new file mode 100755 index 0000000..b4e8d5c --- /dev/null +++ b/deploy-update-targz.sh @@ -0,0 +1,57 @@ +#!/bin/bash +# Script mise à jour avec archive .tar.gz +set -e +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +RED='\033[0;31m' +NC='\033[0m' +echo "=========================================" +echo "Mise à jour Formation Manager Itinova" +echo "=========================================" +if [ -z "$1" ]; then + echo -e "${RED}Usage: $0 /chemin/vers/archive.tar.gz${NC}" + exit 1 +fi +ARCHIVE_PATH="$1" +PROJECT_DIR=$(pwd) +TEMP_DIR="/tmp/formation-update-$$" +echo -e "${YELLOW}1. Sauvegarde BDD...${NC}" +mkdir -p backups +BACKUP_FILE="backups/db-backup-$(date +%Y%m%d-%H%M%S).sql" +DB_USER=$(echo $DATABASE_URL | sed -n 's/.*:\/\/\([^:]*\):.*/\1/p') +DB_PASS=$(echo $DATABASE_URL | sed -n 's/.*:\/\/[^:]*:\([^@]*\)@.*/\1/p') +DB_HOST=$(echo $DATABASE_URL | sed -n 's/.*@\([^:]*\):.*/\1/p') +DB_PORT=$(echo $DATABASE_URL | sed -n 's/.*:\([0-9]*\)\/.*/\1/p') +DB_NAME=$(echo $DATABASE_URL | sed -n 's/.*\/\([^?]*\).*/\1/p') +mysqldump -h "$DB_HOST" -P "$DB_PORT" -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" > "$BACKUP_FILE" +echo -e "${GREEN}✓ Backup OK${NC}" +echo -e "${YELLOW}2. Arrêt serveur...${NC}" +pm2 stop formation-manager || true +echo -e "${GREEN}✓ OK${NC}" +echo -e "${YELLOW}3. Extraction...${NC}" +mkdir -p "$TEMP_DIR" +tar -xzf "$ARCHIVE_PATH" -C "$TEMP_DIR" +if [ -d "$TEMP_DIR/formation-manager-itinova" ]; then + EXTRACTED_DIR="$TEMP_DIR/formation-manager-itinova" +else + EXTRACTED_DIR="$TEMP_DIR" +fi +echo -e "${GREEN}✓ OK${NC}" +echo -e "${YELLOW}4. Copie fichiers...${NC}" +rsync -av --exclude='node_modules' --exclude='dist' --exclude='backups' "$EXTRACTED_DIR/" "$PROJECT_DIR/" +rm -rf "$TEMP_DIR" +echo -e "${GREEN}✓ OK${NC}" +echo -e "${YELLOW}5. pnpm install...${NC}" +pnpm install +echo -e "${GREEN}✓ OK${NC}" +echo -e "${YELLOW}6. pnpm db:push...${NC}" +pnpm db:push +echo -e "${GREEN}✓ OK${NC}" +echo -e "${YELLOW}7. pnpm build...${NC}" +pnpm build +echo -e "${GREEN}✓ OK${NC}" +echo -e "${YELLOW}8. Redémarrage...${NC}" +pm2 restart formation-manager || pm2 start npm --name "formation-manager" -- start +echo -e "${GREEN}✓ OK${NC}" +pm2 status formation-manager +echo -e "${GREEN}Mise à jour terminée !${NC}"