# Déploiement GenIaC sur OVH mutualisé — SANS SSH (PHP 8.4)

> Votre SSH ne propose que PHP 5.4 (inutilisable), MAIS votre **site web tourne en PHP 8.4**.
> On déploie donc **sans SSH** : tout est préparé en local, on téléverse, on importe la base
> via phpMyAdmin. Aucune commande sur le serveur.

---

## ✅ Ce qui est DÉJÀ prêt (généré pour vous)

| Fichier | Rôle |
|---|---|
| `vendor/` | Dépendances PHP de production (déjà généré, à téléverser) |
| `public/build/` | CSS/JS compilés (déjà généré via `npm run build`) |
| `.env.production` | Configuration prod (APP_KEY déjà incluse) — **à compléter** |
| `geniac_mysql_import.sql` | Toute la base (7 formations, 94 leçons, comptes…) — testé OK |

---

## ÉTAPE 1 — Créer la base MySQL chez OVH

Espace client OVH → **Bases de données** → créer une base MySQL.
Notez : **hôte** (ex. `xxxxx.mysql.db`), **nom de base**, **utilisateur**, **mot de passe**.

> 🔗 **Base partagée entre plusieurs apps GenIaC** : c'est prévu. Cette application
> préfixe TOUTES ses tables avec **`acad_`** (réglé par `DB_PREFIX=acad_` dans le `.env`,
> et le dump est déjà préfixé). Une autre app GenIaC dans la même base utilisera un
> **autre préfixe** (ex. `crm_`) → aucune collision, même sur les tables génériques
> (`users`, `sessions`…). Vérifié : Laravel lit bien les tables `acad_*`.

## ÉTAPE 2 — Compléter le fichier de configuration

1. Ouvrez `.env.production` (sur votre PC).
2. Remplacez les `<...>` par vos valeurs :
   - `APP_URL` → votre domaine (https://…)
   - `DB_HOST`, `DB_DATABASE`, `DB_USERNAME`, `DB_PASSWORD` → infos de l'étape 1
   - (optionnel) les infos `MAIL_*` si vous voulez les e-mails
3. **L'`APP_KEY` est déjà remplie**, n'y touchez pas.

## ÉTAPE 3 — Téléverser les fichiers (SFTP / FileZilla)

Organisation cible sur le serveur (le projet HORS du dossier web) :
```
~/geniac/          ← TOUT le projet ici
~/www/  (ou le dossier web par défaut) ← doit pointer vers ~/geniac/public
```

**À téléverser dans `~/geniac/`** : tout le contenu de `plateforme-formation/`
**SAUF** `node_modules/`. (Le `vendor/` et `public/build/`, eux, DOIVENT être envoyés.)

Puis :
- Renommez `.env.production` en **`.env`** sur le serveur.
- (Supprimez `database/database.sqlite` du serveur s'il a été envoyé — on utilise MySQL.)

## ÉTAPE 4 — Faire pointer le domaine sur `public/`

Espace client OVH → **Multisite** → votre domaine → **dossier racine** = `geniac/public`.
> ⚠️ C'est l'étape clé : le web doit pointer sur `…/public`, jamais sur la racine du projet
> (sinon le `.env` et le code seraient exposés).

## ÉTAPE 5 — Importer la base (phpMyAdmin)

1. Espace client OVH → base de données → **phpMyAdmin**.
2. Sélectionnez votre base → onglet **Importer**.
3. Choisissez le fichier **`geniac_mysql_import.sql`** → **Exécuter**.
4. Vérifiez : la table `formations` doit contenir 7 lignes.

## ÉTAPE 6 — Régler les permissions (depuis FileZilla)

Clic droit sur les dossiers **`storage/`** et **`bootstrap/cache/`** → permissions → **755**
(ils doivent être inscriptibles par le serveur).

## ÉTAPE 7 — Activer HTTPS

Espace client OVH → **SSL** → activer le certificat **Let's Encrypt** (gratuit).

## ÉTAPE 8 — Vérifier

Ouvrez `https://votre-domaine` → la page d'accueil GenIaC doit s'afficher.
Connexion de test : `admin@geniac.test` / `password` (⚠️ **changez ce mot de passe** ensuite).

---

## En cas de page blanche / erreur 500

1. Mettez temporairement `APP_DEBUG=true` dans `.env`, rechargez → lisez le message.
2. Causes fréquentes :
   - dossier racine du domaine **pas** sur `…/public`
   - `storage/` non inscriptible (permissions 755)
   - une valeur `DB_*` incorrecte dans `.env`
3. **Remettez `APP_DEBUG=false`** une fois réglé.
4. Consultez `storage/logs/laravel.log` (via FileZilla) pour le détail.

---

## Mises à jour ultérieures
- Modif du **code** → re-téléverser les fichiers changés.
- Modif du **design** → `npm run build` en local, puis re-téléverser `public/build/`.
- Supprimer `bootstrap/cache/*.php` sur le serveur force la régénération des caches.

---
*Préparé pour Gildas DJIMADJA — GenIaC. Déploiement mutualisé sans SSH.*
