# Déploiement d'ElykiasPay sur OVH mutualisé (SSH)

Guide pas-à-pas. Pré-requis déjà remplis : **SSH activé** + **base MySQL créée**.
Remplacez partout :
- `elykiaspay.elykias.com`  → votre domaine/sous-domaine, ex. `pay.mondomaine.com`
- `<sshuser>@<sshhost>` → identifiants SSH OVH (espace client > Hébergement > SSH/FTP)
- `php8.3` → le binaire PHP 8.3 d'OVH (vérifiez avec `php8.3 -v` ; sinon `php` ou le chemin fourni par OVH)

---

## Étape 1 — PHP 8.3
Le fichier `.ovhconfig` (à la racine du projet) force PHP 8.3 côté web. Vérifiez aussi
dans l'espace client OVH que la version PHP du hébergement est bien **8.3**.

## Étape 2 — Choisir l'emplacement des fichiers
Pour la sécurité, l'application NE doit PAS être servie en entier : seul le dossier
`public/` doit être exposé. Recommandation : placez l'app dans un dossier **à côté**
de `www` (pas dedans), ex. dans votre home SSH : `~/elykiaspay/`.

```
~/                      (home SSH)
├── www/                (site principal éventuel)
└── elykiaspay/         <-- l'application Laravel complète
    ├── app/  bootstrap/  config/  ...
    └── public/         <-- SEUL dossier exposé au web
```

## Étape 3 — Transférer le code
Depuis votre PC. **N'envoyez PAS** `vendor/`, `node_modules/`, `.env`, `.git/`
(on installe les dépendances sur le serveur).

**Option A — FileZilla (SFTP)** : connectez-vous en SFTP, créez `elykiaspay/`,
glissez tout le projet SAUF les dossiers ci-dessus.

**Option B — en ligne de commande (Git Bash)** :
```bash
scp -r ./app ./bootstrap ./config ./database ./public ./resources ./routes \
      ./storage ./artisan ./composer.json ./composer.lock ./.ovhconfig \
      <sshuser>@<sshhost>:~/elykiaspay/
```

## Étape 4 — Installer & configurer (en SSH)
```bash
ssh <sshuser>@<sshhost>
cd ~/elykiaspay

# 1) Dépendances de production
composer install --no-dev --optimize-autoloader
#   (si "composer" absent :  php8.3 -r "copy('https://getcomposer.org/installer','ci.php');" \
#    && php8.3 ci.php && php8.3 composer.phar install --no-dev --optimize-autoloader )

# 2) Fichier d'environnement
cp .env.production .env
nano .env      # renseignez DB_*, APP_URL=https://elykiaspay.elykias.com, MTN_MOMO_CALLBACK_URL

# 3) Clé applicative + migrations + caches
php8.3 artisan key:generate
php8.3 artisan migrate --force
php8.3 artisan config:cache
php8.3 artisan route:cache
php8.3 artisan view:cache

# 4) Permissions d'écriture
chmod -R 775 storage bootstrap/cache
```

## Étape 5 — Pointer le domaine sur public/
Espace client OVH > **Hébergement > Multisite** > *Ajouter un domaine/sous-domaine* :
- Domaine : `elykiaspay.elykias.com`
- **Dossier racine** : `elykiaspay/public`  ← indispensable (pas `elykiaspay` seul)
- Laisser OVH créer/valider.

## Étape 6 — HTTPS (obligatoire pour du paiement)
Espace client OVH > Hébergement > onglet **SSL** : activez le certificat
Let's Encrypt gratuit pour `elykiaspay.elykias.com`. Laravel force déjà le HTTPS en production
via `APP_URL=https://...`.

## Étape 7 — Tâche planifiée (cron)
Espace client OVH > Hébergement > **Tâches planifiées (CRON)** > Ajouter :
- Commande :
  ```
  php8.3 ~/elykiaspay/artisan schedule:run >/dev/null 2>&1
  ```
- Fréquence : **chaque minute** (ou la plus fréquente disponible).
- Langage : PHP 8.3.

C'est ce cron qui traite la file d'attente (notifications sortantes, ré-essais).

## Étape 8 — Enregistrer vos applications clientes
```bash
php8.3 artisan elykiaspay:app "Malewa ERP" --url=https://malewa.exemple/webhooks/elykias
php8.3 artisan elykiaspay:app "Loukolo"
php8.3 artisan elykiaspay:app "Kimopaya"
```
Notez chaque `API Key` + `API Secret` (le secret n'est affiché qu'une fois).

## Étape 9 — Vérifier
```bash
curl https://elykiaspay.elykias.com/up          # doit répondre 200 (health check)
```
La console de test `/sandbox` est **désactivée en production** (elle n'existe qu'en local).
Pour un vrai test, faites un appel signé sur `POST /api/v1/payments` avec le driver `fake`,
puis branchez MTN.

---

## Redéploiement (mises à jour)
```bash
# (ré-envoyer les fichiers modifiés, puis)
cd ~/elykiaspay
composer install --no-dev --optimize-autoloader
php8.3 artisan migrate --force
php8.3 artisan config:cache && php8.3 artisan route:cache && php8.3 artisan view:cache
```

## Checklist sécurité
- [ ] `APP_DEBUG=false` et `APP_ENV=production`
- [ ] `.env` présent sur le serveur, jamais transféré depuis un dépôt public
- [ ] Domaine pointé sur `.../public` uniquement
- [ ] HTTPS actif (Let's Encrypt)
- [ ] `storage/` et `bootstrap/cache/` inscriptibles (775)
- [ ] Cron `schedule:run` actif
