# Mode d’emploi – Déploiement Caplogg (Node 20, cPanel / o2switch)

Guide pour reproduire la mise en place sur un hébergement type cPanel (o2switch, etc.) avec une application Node.js.

---

## 1. En local : préparer l’export

### 1.1 Build du frontend

À la racine du projet caplogg :

```bash
cd /chemin/vers/caplogg
npm run build
```

Vérifier que **`frontend/dist/`** contient `index.html` et `assets/`.

### 1.2 Contenu du dossier d’export

Créer un dossier (ex. **`ETU.foutech-solutions.fr`** ou le nom de ton sous-domaine). Il doit contenir **uniquement** :

| Emplacement | Contenu |
|-------------|--------|
| **Racine** | Fichier **`package.json`** (celui à la racine du projet caplogg). |
| **backend/** | Tout le dossier **backend/** du projet **sans** `node_modules` : `package.json`, `server.js`, `.env`, `data/`, `routes/`, `lib/`, `middleware/`, `services/`, `websocket/`, `scripts/`, `supabase/`. |
| **frontend/dist/** | Tout le contenu de **`frontend/dist/`** (après `npm run build`) : `index.html`, `assets/`, `sw.js`, `manifest.webmanifest`, etc. |

À **ne pas** inclure : `frontend/src/`, `frontend/package.json`, `scripts/` à la racine, `backend/node_modules`.

Vérifier que **`backend/package.json`** existe et contient la section **`dependencies`** (express, dotenv, cors, etc.).

### 1.3 Variables d’environnement (backend)

Dans **`backend/.env`** (dans l’export), prévoir au minimum :

- **`SUPERADMIN_SECRET`** : code de connexion super admin (ex. `super-secret` ou une valeur personnalisée). En production, utiliser une valeur longue et secrète.
- Autres variables si besoin : JWT, Supabase, SMTP, etc. (voir `backend/.env.example`).

### 1.4 Zipper l’export

Zipper le dossier d’export (ex. **ETU.foutech-solutions.fr.zip**) pour l’envoi sur le serveur.

---

## 2. Sur le serveur : envoi des fichiers

- Envoyer le ZIP (ou les fichiers) par **File Manager** cPanel ou **FTP/SFTP**.
- Décompresser / placer les fichiers pour obtenir la structure suivante :

  ```
  /home/VOTRE_USER/NOM_APP/
  ├── package.json
  ├── backend/
  │   ├── package.json
  │   ├── server.js
  │   ├── .env
  │   └── ...
  └── frontend/
      └── dist/
          ├── index.html
          └── assets/
              └── ...
  ```

Remplacer **VOTRE_USER** et **NOM_APP** par tes valeurs (ex. `lawe1618`, `ETU.foutech-solutions.fr`).

---

## 3. cPanel : application Node.js

### 3.1 Créer l’application

- Aller dans **Setup Node.js App** (ou **Web Applications**).
- **Create Application** (ou équivalent).
- Renseigner :

| Champ | Valeur |
|-------|--------|
| **Node.js version** | **20.x** (obligatoire, pas 10). |
| **Application mode** | Production |
| **Application root** | Nom du dossier (ex. `ETU.foutech-solutions.fr`). |
| **Application URL** | Sous-domaine ou domaine (ex. `etu.foutech-solutions.fr`). |
| **Application startup file** | **`backend/server.js`** |

- **Save** / **Create**.

### 3.2 À ne pas faire

- Ne **pas** cliquer sur **Run NPM Install** à la racine (risque de lancer un build ou d’installer au mauvais endroit).
- Ne **pas** lancer de commande **build** ou **dev** sur le serveur.

---

## 4. SSH : installer les dépendances du backend

Le venv Node de cPanel force un **prefix** npm : les paquets sont installés dans le venv, pas dans **backend/node_modules**. Il faut donc utiliser le **npm système** (Node 20) pour installer dans **backend/**.

### 4.1 Se connecter en SSH

Se connecter au serveur en SSH avec l’utilisateur de l’hébergement.

### 4.2 Aller dans le backend

```bash
cd /home/VOTRE_USER/NOM_APP/backend
```

Exemple : `cd /home/lawe1618/ETU.foutech-solutions.fr/backend`

### 4.3 Supprimer un ancien node_modules (si présent)

Si un **node_modules** existe déjà (ou un zip décompressé) et ne contient pas express/dotenv/cors :

```bash
rm -rf node_modules
rm -f package-lock.json
```

### 4.4 Installer avec le npm système (Node 20)

Sans activer le venv (ou après `deactivate`), lancer :

```bash
/opt/alt/alt-nodejs20/root/usr/bin/npm install --production
```

(Adapter le chemin si ton hébergeur utilise un autre emplacement pour Node 20 ; demander au support si besoin.)

Tu dois voir des lignes du type **"added XXX packages"**. Vérifier :

```bash
ls node_modules/express node_modules/dotenv node_modules/cors
```

Les trois dossiers doivent exister.

### 4.5 (Optionnel) Tester le serveur à la main

Avec le venv activé (pour utiliser Node 20) :

```bash
source /home/VOTRE_USER/nodevenv/NOM_APP/20/bin/activate
node server.js
```

Tu dois voir : **"API écoute sur http://0.0.0.0:3000"**. Arrêter avec **Ctrl+C**.

---

## 5. Démarrer l’application (cPanel)

- Dans **Setup Node.js App**, sélectionner l’application (ex. **ETU.foutech-solutions.fr**).
- Vérifier : **Application startup file** = **`backend/server.js`**, **Node.js version** = **20.x**.
- Cliquer sur **RESTART** (ou STOP puis START).

---

## 6. Vérifications

| Test | URL / action |
|------|----------------|
| Page d’accueil | https://ton-domaine.fr/ |
| API santé | https://ton-domaine.fr/api/health → doit renvoyer `{"ok":true}` |
| Connexion super admin | Page de login → saisir le code défini dans **SUPERADMIN_SECRET** (ex. `super-secret` ou la valeur en majuscules avec tirets, ex. `SUPER-SECRET`). |

Si le code super admin ne fonctionne pas : vérifier que **`SUPERADMIN_SECRET`** est bien défini dans **`backend/.env`** sur le serveur et redémarrer l’app.

---

## 7. Résumé des commandes (à adapter)

```bash
# --- En local ---
cd /chemin/vers/caplogg
npm run build
# Puis créer le dossier d'export (package.json, backend sans node_modules, frontend/dist) et zipper.

# --- Sur le serveur (SSH) ---
cd /home/VOTRE_USER/NOM_APP/backend
rm -rf node_modules
rm -f package-lock.json
/opt/alt/alt-nodejs20/root/usr/bin/npm install --production
# Puis dans cPanel : RESTART l'application Node.
```

---

## 8. Dépannage rapide

| Problème | Piste de solution |
|----------|-------------------|
| Erreur "Cannot find package 'dotenv'" | Réinstaller dans **backend/** avec le npm système (étape 4.4), pas avec le venv activé. |
| "Code licence invalide" pour le super admin | Vérifier **SUPERADMIN_SECRET** dans **backend/.env** et redémarrer l’app. |
| 500 Internal Server Error | Vérifier les logs de l’app dans cPanel ; s’assurer que Node **20** est bien utilisé (pas 10). |
| Pas de dossier **20** dans nodevenv | Dans cPanel, créer l’app en choisissant **Node 20** dès le départ, ou contacter le support pour activer Node 20. |
