# 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 ! 🚀**
