# Déploiement sur OVH — méthode SFTP (hébergement sans SSH)

Contexte : l'hébergement **dmos.fr** (`dmosfrr.cluster030`) ne propose **que FTP/SFTP**,
pas de SSH. On déploie donc **sans terminal** : on téléverse l'application déjà
prête (dépendances comprises) par **FileZilla**, et un **installateur web à usage
unique** (`setup.php`) joue le rôle des commandes serveur (migrations, 1er compte,
lien des photos).

Serveur SFTP : `ftp.cluster130.hosting.ovh.net` — utilisateur `dmosfrr` — **port 22**.
Dossier home : `/home/dmosfrr`.

---

## 0. Prérequis (dans le manager OVH)
- **PHP 8.3** sélectionné pour l'hébergement (Hébergement → *Informations générales* → *Modifier* la version PHP si besoin).
- **Base MySQL créée** : notez **hôte** (ex. `dmosfrrxxx.mysql.db`), **nom de base**, **utilisateur**, **mot de passe** (Web Cloud → *Bases de données SQL*).
- **FileZilla** installé sur votre PC (gratuit).

---

## 1. En local (déjà prêt)
Les dépendances (`vendor/`) et les assets compilés (`public/build/`) sont déjà
présents dans le projet. Si vous avez modifié le front depuis, relancez seulement :

```powershell
npm run build
```

---

## 2. Compléter le fichier `.env` de production
Ouvrez **`.env.production`** (à la racine du projet) et remplissez **uniquement**
les 4 lignes MySQL avec les identifiants OVH notés à l'étape 0 :

```
DB_HOST=dmosfrrxxx.mysql.db
DB_DATABASE=...
DB_USERNAME=...
DB_PASSWORD=...
```

(`APP_KEY` et `APP_URL=https://dmos.fr` sont déjà renseignés.)

---

## 3. Téléverser l'application par FileZilla
Connexion FileZilla :
- **Hôte** : `ftp.cluster130.hosting.ovh.net`
- **Protocole** : *SFTP* — **Port** : `22`
- **Identifiant** : `dmosfrr` — **Mot de passe** : celui de l'utilisateur FTP

Puis, côté serveur, dans `/home/dmosfrr/` :
1. Créez un dossier **`melodesk`**.
2. Téléversez dedans **tout le projet SAUF** : `node_modules/`, `.git/`,
   `melodesk_charte_graphique.zip`, et le `.env` de développement.
   → On envoie bien : `app/`, `bootstrap/`, `config/`, `database/`, `public/`,
   `resources/`, `routes/`, `storage/`, `vendor/`, `artisan`, `composer.json`,
   `schedule-cron.php`, etc.
3. Téléversez **`.env.production`** puis, sur le serveur, **renommez-le en `.env`**.

> ⏳ Le dossier `vendor/` contient beaucoup de fichiers : l'envoi peut prendre
> 15–30 min. C'est normal, et à ne faire qu'une fois.

---

## 4. Pointer le domaine sur `public/`
Manager OVH → **Hébergement → Multisite** :
- Ajoutez / éditez **dmos.fr** et réglez le **dossier racine** sur **`melodesk/public`**.
- Activez le certificat **SSL** (Let's Encrypt) → le site répond en **HTTPS**.

Le fichier `public/.htaccess` (fourni par Laravel) gère la réécriture d'URL.

---

## 5. Lancer l'installation (une seule fois)
1. Ouvrez **`https://dmos.fr/setup.php`**.
2. Remplissez : nom de l'école, votre nom, votre e-mail, votre mot de passe.
3. Cliquez **Lancer l'installation** → migrations + votre compte admin + lien des photos.
4. **Supprimez `setup.php`** du serveur via FileZilla (dossier `melodesk/public/`).
5. Connectez-vous sur **`https://dmos.fr/login`**.

---

## 6. Cron des rappels e-mail (24 h / 12 h)
Manager OVH → **Tâches planifiées (cron)** :
- **Langage** : PHP 8.3
- **Commande / script** : `melodesk/schedule-cron.php`
- **Fréquence** : toutes les heures

---

## 7. Mises à jour ultérieures (sans SSH)
1. En local : `npm run build` si le front a changé.
2. FileZilla : re-téléversez **seulement les fichiers modifiés** (ex. `public/build/`,
   `app/`, `resources/`…). Ne touchez pas au `.env` du serveur.
3. **Nouvelle migration de base ?** Prévenez-moi : je fournirai un petit script
   `migrate.php` (même principe que `setup.php`, à supprimer après) pour appliquer
   les changements de base sans terminal.

---

## Notes & points d'attention
- **E-mail** : on démarre en `MAIL_MAILER=log` (aucun envoi). On branchera un SMTP
  (Brevo/Mailjet) quand vous voudrez activer les vrais e-mails.
- **Sessions / cache** : stockés en base (tables migrées) → aucun worker requis.
- **HTTPS** : forcé en production (voir `AppServiceProvider`) pour éviter les
  contenus mixtes derrière le proxy OVH.
- **Index MySQL** : `Schema::defaultStringLength(191)` déjà en place (évite l'erreur
  « key too long » en utf8mb4 sur MariaDB).
- **Photos** : servies via le lien `storage` créé par `setup.php`. Si l'installateur
  signale que le lien n'a pas pu être créé (symlink désactivé par OVH), dites-le moi :
  on basculera le stockage des photos directement dans `public/` (petit ajustement).
- **Sécurité** : `setup.php` doit être **supprimé** juste après l'installation.
