diff --git a/.gitignore b/.gitignore index c1dbd8b..82c46c3 100644 --- a/.gitignore +++ b/.gitignore @@ -105,3 +105,8 @@ temp/ *.db *.sqlite *.sqlite3 + +# Backups +backups/ +*.sql +*.dump diff --git a/GUIDE-GIT.md b/GUIDE-GIT.md new file mode 100644 index 0000000..446d1cf --- /dev/null +++ b/GUIDE-GIT.md @@ -0,0 +1,403 @@ +# Guide complet - Configuration Git et déploiement + +Ce guide vous accompagne pas à pas pour mettre votre code sur Git et le déployer sur votre serveur VPS. + +--- + +## 📋 Prérequis + +- Un compte GitHub (gratuit) - https://github.com/signup +- Git installé sur votre machine locale +- Accès SSH à votre serveur VPS + +--- + +## Étape 1️⃣ : Créer un compte GitHub (si vous n'en avez pas) + +1. Aller sur https://github.com/signup +2. Créer un compte avec votre email +3. Vérifier votre email +4. Se connecter à GitHub + +--- + +## Étape 2️⃣ : Créer un dépôt GitHub + +1. **Se connecter à GitHub** + - Aller sur https://github.com + +2. **Créer un nouveau dépôt** + - Cliquer sur le bouton **"+"** en haut à droite + - Sélectionner **"New repository"** + +3. **Configurer le dépôt** + - **Repository name** : `formation-manager-itinova` + - **Description** : "Gestion des formations Manager Itinova" + - **Visibilité** : + - ✅ **Private** (recommandé - seul vous pouvez voir le code) + - ⚠️ Public (tout le monde peut voir le code) + - **NE PAS** cocher "Add a README file" + - **NE PAS** ajouter .gitignore (on l'a déjà) + - **NE PAS** choisir de licence + - Cliquer sur **"Create repository"** + +4. **Noter l'URL du dépôt** + - GitHub vous montre une page avec des instructions + - Noter l'URL qui ressemble à : `https://github.com/VOTRE-USERNAME/formation-manager-itinova.git` + +--- + +## Étape 3️⃣ : Télécharger le code depuis Manus + +1. **Dans l'interface Manus** + - Cliquer sur l'onglet **"Code"** (à droite) + - Cliquer sur le bouton **"Download all files"** (en haut) + - Un fichier ZIP sera téléchargé + +2. **Extraire le ZIP** + - Extraire le contenu dans un dossier sur votre ordinateur + - Par exemple : `C:\Projets\formation-manager-itinova` (Windows) + - Ou : `~/Projets/formation-manager-itinova` (Mac/Linux) + +--- + +## Étape 4️⃣ : Configurer Git sur votre machine locale + +### Sur Windows + +1. **Installer Git** + - Télécharger depuis https://git-scm.com/download/win + - Installer avec les options par défaut + - Redémarrer votre ordinateur + +2. **Ouvrir Git Bash** + - Chercher "Git Bash" dans le menu Démarrer + - Ouvrir Git Bash + +### Sur Mac + +1. **Installer Git** + - Ouvrir le Terminal (Applications > Utilitaires > Terminal) + - Taper : `git --version` + - Si Git n'est pas installé, suivre les instructions pour l'installer + +### Sur Linux + +1. **Installer Git** + ```bash + sudo apt update + sudo apt install git + ``` + +--- + +## Étape 5️⃣ : Configurer votre identité Git + +Dans le terminal (Git Bash sur Windows, Terminal sur Mac/Linux) : + +```bash +# Configurer votre nom +git config --global user.name "Votre Nom" + +# Configurer votre email (celui de votre compte GitHub) +git config --global user.email "votre.email@example.com" + +# Vérifier la configuration +git config --list +``` + +--- + +## Étape 6️⃣ : Initialiser Git dans votre projet + +1. **Aller dans le dossier du projet** + ```bash + cd /chemin/vers/formation-manager-itinova + ``` + + Exemples : + - Windows : `cd C:\Projets\formation-manager-itinova` + - Mac/Linux : `cd ~/Projets/formation-manager-itinova` + +2. **Initialiser Git** + ```bash + git init + ``` + + Vous devriez voir : `Initialized empty Git repository` + +3. **Ajouter tous les fichiers** + ```bash + git add . + ``` + +4. **Créer le premier commit** + ```bash + git commit -m "Initial commit - Formation Manager Itinova" + ``` + +5. **Renommer la branche en 'main'** + ```bash + git branch -M main + ``` + +--- + +## Étape 7️⃣ : Connecter votre projet à GitHub + +1. **Ajouter le dépôt distant** + ```bash + git remote add origin https://github.com/VOTRE-USERNAME/formation-manager-itinova.git + ``` + + ⚠️ **Remplacer** `VOTRE-USERNAME` par votre nom d'utilisateur GitHub + +2. **Vérifier la connexion** + ```bash + git remote -v + ``` + + Vous devriez voir deux lignes avec l'URL de votre dépôt + +--- + +## Étape 8️⃣ : Pousser le code vers GitHub + +1. **Pousser le code** + ```bash + git push -u origin main + ``` + +2. **S'authentifier** + - GitHub va vous demander de vous authentifier + - **Méthode recommandée** : Utiliser un Personal Access Token (PAT) + +### Créer un Personal Access Token (PAT) + +1. **Sur GitHub** + - Aller dans **Settings** (icône de profil en haut à droite) + - Cliquer sur **Developer settings** (tout en bas à gauche) + - Cliquer sur **Personal access tokens** > **Tokens (classic)** + - Cliquer sur **Generate new token** > **Generate new token (classic)** + +2. **Configurer le token** + - **Note** : "Formation Manager Itinova - Déploiement" + - **Expiration** : 90 days (ou No expiration si vous êtes seul) + - **Cocher les permissions** : + - ✅ `repo` (tous les sous-éléments) + - Cliquer sur **Generate token** + +3. **Copier le token** + - ⚠️ **IMPORTANT** : Copier le token et le sauvegarder dans un endroit sûr + - Vous ne pourrez plus le voir après avoir quitté la page + +4. **Utiliser le token** + - Quand Git vous demande le mot de passe, coller le token (pas votre mot de passe GitHub) + - Le token remplace votre mot de passe + +5. **Vérifier sur GitHub** + - Aller sur https://github.com/VOTRE-USERNAME/formation-manager-itinova + - Vous devriez voir tous vos fichiers + +--- + +## Étape 9️⃣ : Configurer Git sur le serveur VPS + +Maintenant que le code est sur GitHub, configurons le serveur VPS pour récupérer le code. + +### Se connecter au serveur VPS + +```bash +ssh votre-utilisateur@votre-serveur.com +``` + +### Installer Git sur le serveur (si pas déjà installé) + +```bash +# Vérifier si Git est installé +git --version + +# Si pas installé, installer Git +sudo apt update +sudo apt install git -y +``` + +### Cloner le dépôt sur le serveur + +```bash +# Aller dans le répertoire où vous voulez installer le projet +cd /var/www # ou un autre répertoire + +# Cloner le dépôt +git clone https://github.com/VOTRE-USERNAME/formation-manager-itinova.git + +# Entrer dans le dossier +cd formation-manager-itinova +``` + +### Configurer les variables d'environnement + +```bash +# Créer le fichier .env +nano .env +``` + +Copier-coller vos variables d'environnement : + +```env +DATABASE_URL=mysql://user:password@host:port/database +RESEND_API_KEY=votre_cle_resend +JWT_SECRET=votre_secret_jwt +# ... autres variables +``` + +Sauvegarder : `Ctrl+X`, puis `Y`, puis `Entrée` + +### Installer les dépendances + +```bash +# Installer pnpm si pas déjà installé +npm install -g pnpm + +# Installer les dépendances du projet +pnpm install +``` + +### Appliquer les migrations de base de données + +```bash +pnpm db:push +``` + +### Compiler le projet + +```bash +pnpm build +``` + +### Démarrer le serveur avec PM2 + +```bash +# Installer PM2 si pas déjà installé +npm install -g pm2 + +# Démarrer le serveur +pm2 start npm --name "formation-manager" -- start + +# Sauvegarder la configuration PM2 +pm2 save + +# Configurer PM2 pour démarrer au boot +pm2 startup +# Suivre les instructions affichées +``` + +--- + +## Étape 🔟 : Déployer les futures mises à jour + +Maintenant que tout est configuré, pour les futures mises à jour : + +### Sur votre machine locale + +```bash +# 1. Télécharger le nouveau code depuis Manus +# 2. Remplacer les fichiers dans votre dossier local +# 3. Ajouter les modifications +git add . + +# 4. Créer un commit +git commit -m "Description des modifications" + +# 5. Pousser vers GitHub +git push origin main +``` + +### Sur le serveur VPS + +```bash +# Se connecter au serveur +ssh votre-utilisateur@votre-serveur.com + +# Aller dans le dossier du projet +cd /var/www/formation-manager-itinova + +# Exécuter le script de mise à jour +./deploy-update.sh +``` + +Le script `deploy-update.sh` va automatiquement : +- ✅ Sauvegarder la base de données +- ✅ Arrêter le serveur +- ✅ Récupérer le nouveau code depuis GitHub (`git pull`) +- ✅ Installer les nouvelles dépendances +- ✅ Appliquer les migrations +- ✅ Recompiler le projet +- ✅ Redémarrer le serveur + +--- + +## 🔒 Sécurité - Fichiers à ne PAS pousser sur Git + +Le fichier `.gitignore` est déjà configuré pour exclure : +- ❌ `.env` (variables d'environnement sensibles) +- ❌ `node_modules/` (dépendances) +- ❌ `dist/` (fichiers compilés) +- ❌ Fichiers de backup de la base de données + +**⚠️ IMPORTANT** : Ne JAMAIS pousser le fichier `.env` sur Git ! + +--- + +## 📞 Aide et dépannage + +### Problème : "Permission denied (publickey)" + +**Solution** : Utiliser HTTPS au lieu de SSH pour le dépôt +```bash +git remote set-url origin https://github.com/VOTRE-USERNAME/formation-manager-itinova.git +``` + +### Problème : "Authentication failed" + +**Solution** : Utiliser un Personal Access Token au lieu du mot de passe (voir Étape 8) + +### Problème : "git: command not found" + +**Solution** : Installer Git (voir Étape 4) + +### Problème : Le script deploy-update.sh ne fonctionne pas + +**Solution** : Vérifier les permissions +```bash +chmod +x deploy-update.sh +``` + +--- + +## 📚 Ressources utiles + +- Documentation Git : https://git-scm.com/doc +- Documentation GitHub : https://docs.github.com +- Tutoriel Git interactif : https://learngitbranching.js.org + +--- + +## ✅ Checklist finale + +Avant de déployer en production : + +- [ ] Code poussé sur GitHub +- [ ] Serveur VPS configuré avec Git +- [ ] Dépôt cloné sur le serveur +- [ ] Variables d'environnement configurées (.env) +- [ ] Dépendances installées (pnpm install) +- [ ] Base de données migrée (pnpm db:push) +- [ ] Projet compilé (pnpm build) +- [ ] Serveur démarré avec PM2 +- [ ] Script deploy-update.sh testé +- [ ] Backup de la base de données effectué + +--- + +**Bon déploiement ! 🚀**