From 71e419681e404038a104bb2428eb28ceb7ef894f Mon Sep 17 00:00:00 2001 From: Manus Sandbox Date: Wed, 3 Dec 2025 05:16:38 -0500 Subject: [PATCH] =?UTF-8?q?Checkpoint:=20Version=20finale=20avec=20guide?= =?UTF-8?q?=20de=20d=C3=A9ploiement=20manuel=20sans=20Git?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Contenu de cette version : 1. Corrections de bugs (versions précédentes) : - Bug d'inscription (procédure publique createPublic) - Bug email de confirmation (variables {{prenomApprenant}} et {{datesHTML}}) - Amélioration interface templates d'emails 2. Scripts de déploiement VPS avec Git : - deploy-update.sh : Script automatique avec git pull - update-database.sql : Script SQL de mise à jour - INSTRUCTIONS-DEPLOIEMENT.md : Documentation complète - GUIDE-GIT.md : Guide Git pour débutants 3. Déploiement manuel SANS Git (NOUVEAU) : - DEPLOIEMENT-MANUEL.md : Guide complet déploiement manuel - deploy-update-manual.sh : Script de mise à jour sans git pull - Transfert via SFTP (FileZilla/WinSCP) - Procédure simplifiée étape par étape Le client peut maintenant choisir : - Option A : Déploiement avec Git (automatisé) - Option B : Déploiement manuel via SFTP (plus simple) Prêt pour le déploiement en production. --- DEPLOIEMENT-MANUEL.md | 120 ++++++++++++++++++++++++++++++++++++++++ deploy-update-manual.sh | 91 ++++++++++++++++++++++++++++++ 2 files changed, 211 insertions(+) create mode 100644 DEPLOIEMENT-MANUEL.md create mode 100755 deploy-update-manual.sh diff --git a/DEPLOIEMENT-MANUEL.md b/DEPLOIEMENT-MANUEL.md new file mode 100644 index 0000000..63a7bb4 --- /dev/null +++ b/DEPLOIEMENT-MANUEL.md @@ -0,0 +1,120 @@ +# Guide de déploiement manuel sur VPS (sans Git) + +Ce guide vous permet de déployer votre application sur un serveur VPS sans utiliser Git. + +--- + +## 📋 Prérequis + +- Accès SSH au serveur VPS +- Client SFTP (FileZilla ou WinSCP) +- Fichiers téléchargés depuis Manus + +--- + +## Étape 1 : Télécharger les fichiers depuis Manus + +1. Dans Manus, onglet "Code" → "Download all files" +2. Extraire le ZIP dans un dossier temporaire +3. Supprimer ces dossiers avant transfert : + - `node_modules/` + - `dist/` ou `build/` + - `.env` + - `backups/` + +--- + +## Étape 2 : Transférer les fichiers via SFTP + +### Avec FileZilla + +1. Télécharger : https://filezilla-project.org +2. Connexion SFTP : + - Hôte : votre-serveur.com + - Port : 22 + - Utilisateur : votre-user + - Mot de passe : votre-password +3. Transférer les fichiers vers `/var/www/formation-manager-itinova/` + +--- + +## Étape 3 : Se connecter en SSH + +```bash +ssh votre-utilisateur@votre-serveur.com +cd /var/www/formation-manager-itinova +``` + +--- + +## Étape 4 : Configuration (première installation) + +```bash +# Installer Node.js 22 +curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash - +sudo apt-get install -y nodejs + +# Installer pnpm et PM2 +npm install -g pnpm pm2 + +# Créer le fichier .env +nano .env +``` + +Copier vos variables d'environnement, sauvegarder (Ctrl+X, Y, Entrée) + +--- + +## Étape 5 : Installation + +```bash +# Installer les dépendances +pnpm install + +# Appliquer les migrations +pnpm db:push + +# Compiler +pnpm build + +# Démarrer +pm2 start npm --name "formation-manager" -- start +pm2 save +pm2 startup +``` + +--- + +## Étape 6 : Mise à jour (installations suivantes) + +```bash +# 1. Sauvegarder la base de données +mkdir -p backups +mysqldump -h HOST -P PORT -u USER -pPASSWORD DATABASE > backups/backup-$(date +%Y%m%d-%H%M%S).sql + +# 2. Arrêter le serveur +pm2 stop formation-manager + +# 3. Transférer les nouveaux fichiers via SFTP + +# 4. Mettre à jour +pnpm install +pnpm db:push +pnpm build + +# 5. Redémarrer +pm2 restart formation-manager +``` + +--- + +## Vérification + +```bash +pm2 status +pm2 logs formation-manager +``` + +--- + +**Bon déploiement ! 🚀** diff --git a/deploy-update-manual.sh b/deploy-update-manual.sh new file mode 100755 index 0000000..362504b --- /dev/null +++ b/deploy-update-manual.sh @@ -0,0 +1,91 @@ +#!/bin/bash + +# Script de mise à jour manuel pour le serveur VPS (sans Git) +# Formation Manager Itinova +# Version: dcb709b3 + +set -e # Arrêter en cas d'erreur + +echo "=========================================" +echo "Mise à jour Formation Manager Itinova" +echo "Mode manuel (sans Git)" +echo "=========================================" +echo "" + +# Couleurs pour les messages +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +RED='\033[0;31m' +NC='\033[0m' # No Color + +# Vérifier que nous sommes dans le bon répertoire +if [ ! -f "package.json" ]; then + echo -e "${RED}Erreur: package.json non trouvé. Êtes-vous dans le bon répertoire ?${NC}" + exit 1 +fi + +echo -e "${YELLOW}1. Sauvegarde de la base de données...${NC}" +# Créer un répertoire de backup s'il n'existe pas +mkdir -p backups +BACKUP_FILE="backups/db-backup-$(date +%Y%m%d-%H%M%S).sql" + +# Extraire les informations de connexion depuis DATABASE_URL +if [ -z "$DATABASE_URL" ]; then + echo -e "${RED}Erreur: DATABASE_URL n'est pas définie${NC}" + exit 1 +fi + +# Parser DATABASE_URL +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') + +echo "Sauvegarde de la base de données $DB_NAME..." +mysqldump -h "$DB_HOST" -P "$DB_PORT" -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" > "$BACKUP_FILE" +echo -e "${GREEN}✓ Sauvegarde créée: $BACKUP_FILE${NC}" +echo "" + +echo -e "${YELLOW}2. Arrêt du serveur...${NC}" +pm2 stop formation-manager || echo "Le serveur n'était pas démarré" +echo -e "${GREEN}✓ Serveur arrêté${NC}" +echo "" + +echo -e "${YELLOW}3. Les fichiers ont été transférés via SFTP${NC}" +echo "Assurez-vous d'avoir transféré tous les fichiers modifiés avant de continuer." +read -p "Appuyez sur Entrée pour continuer..." +echo "" + +echo -e "${YELLOW}4. Installation des dépendances...${NC}" +pnpm install +echo -e "${GREEN}✓ Dépendances installées${NC}" +echo "" + +echo -e "${YELLOW}5. Application des migrations de base de données...${NC}" +pnpm db:push +echo -e "${GREEN}✓ Migrations appliquées${NC}" +echo "" + +echo -e "${YELLOW}6. Compilation du projet...${NC}" +pnpm build +echo -e "${GREEN}✓ Projet compilé${NC}" +echo "" + +echo -e "${YELLOW}7. Redémarrage du serveur...${NC}" +pm2 restart formation-manager || pm2 start npm --name "formation-manager" -- start +echo -e "${GREEN}✓ Serveur redémarré${NC}" +echo "" + +echo -e "${YELLOW}8. Vérification du statut...${NC}" +pm2 status formation-manager +echo "" + +echo -e "${GREEN}=========================================${NC}" +echo -e "${GREEN}Mise à jour terminée avec succès !${NC}" +echo -e "${GREEN}=========================================${NC}" +echo "" +echo "Sauvegarde de la base de données: $BACKUP_FILE" +echo "Pour consulter les logs: pm2 logs formation-manager" +echo "Pour arrêter le serveur: pm2 stop formation-manager" +echo ""