# Mise en ligne sur OVH mutualisé — pas à pas

Guide d'installation de **caisse-resto** sur ton hébergement OVH, à dérouler
dans l'ordre. Remplace partout les espaces réservés par tes valeurs :

| Espace réservé | Où le trouver |
|---|---|
| `TON_LOGIN` | Panel OVH → Hébergements → FTP-SSH (login principal) |
| `SSH_HOTE` | Même écran, ex. `ssh.cluster0XX.hosting.ovh.net` |
| `TON_DOMAINE` | Le domaine choisi, ex. `caisse.mondomaine.ch` |
| `DB_SERVEUR` / `DB_NOM` / `DB_USER` | Panel OVH → Bases de données (ex. serveur `xxxx.mysql.db`) |

> Le mot de passe MySQL et le mot de passe SSH ne se notent nulle part :
> tu les tapes quand on te les demande.

---

## 0. Préparatifs dans le panel OVH (5 min)

1. **FTP-SSH** : état SSH = « Actif » (sinon : Modifier l'utilisateur → SSH actif,
   et définis un mot de passe SSH).
2. **Bases de données** : crée une base MySQL → note `DB_SERVEUR`, `DB_NOM`,
   `DB_USER` (le mot de passe : garde-le sous la main).
3. **Multisite** : vérifie que `TON_DOMAINE` figure dans la liste (sinon
   ajoute-le). On règlera son dossier racine à l'étape 5.

## 1. Jeton GitHub (le dépôt est privé)

Le serveur doit pouvoir cloner ton dépôt privé :

1. GitHub → **Settings → Developer settings → Personal access tokens →
   Fine-grained tokens → Generate new token**
2. Repository access : **Only select repositories** → `caisse-resto`
3. Permissions → Repository permissions → **Contents : Read-only**
4. Génère, **copie le jeton** (tu ne le reverras plus).

## 2. Connexion SSH (depuis PowerShell, sur ton PC)

```powershell
ssh TON_LOGIN@SSH_HOTE
```
(accepte l'empreinte à la première connexion, tape ton mot de passe SSH)

## 3. Récupérer le code (sur le serveur)

```bash
git clone https://github.com/spinoops/caisse-resto.git
#  Username : spinoops
#  Password : LE_JETON de l'étape 1

cd caisse-resto
git config credential.helper store   # mémorise le jeton pour les futurs git pull
```

## 4. Installer le backend (sur le serveur)

OVH fournit plusieurs versions de PHP en CLI. Vérifie d'abord :

```bash
php --version          # si < 8.2 :
alias php=/usr/local/php8.2/bin/php   # (à refaire à chaque session SSH)
```

Puis :

```bash
cd ~/caisse-resto/backend
composer install --no-dev --optimize-autoloader

cp .env.production.example .env
nano .env
```

Dans `nano`, remplis au minimum (Ctrl+O puis Ctrl+X pour sauver/quitter) :

```env
APP_URL=https://TON_DOMAINE
FRONTEND_URL=https://TON_DOMAINE
DB_HOST=DB_SERVEUR
DB_DATABASE=DB_NOM
DB_USERNAME=DB_USER
DB_PASSWORD=le_mot_de_passe_mysql
```

Puis :

```bash
php artisan key:generate
php artisan migrate --force        # ⚠️ SANS --seed (on importe tes données à l'étape suivante)
```

## 5. Importer ta carte nettoyée

**Sur ton PC (PowerShell)** — le fichier `deploy-initial-data.sql.gz` est à la
racine du projet (généré localement, jamais commité) :

```powershell
cd D:\wamp64\www\caisse-resto
scp deploy-initial-data.sql.gz TON_LOGIN@SSH_HOTE:~/caisse-resto/
```

**Sur le serveur (SSH)** :

```bash
cd ~/caisse-resto
gunzip -c deploy-initial-data.sql.gz | mysql -h DB_SERVEUR -u DB_USER -p DB_NOM
rm deploy-initial-data.sql.gz      # ménage une fois importé
```

Ça installe : carte nettoyée (899 articles actifs), catégories (couleurs,
postes cuisine, TVA), options, plan de salle, comptes utilisateurs.

## 6. Domaine → dossier `backend/public` + SSL (panel OVH)

Panel → **Multisite** → ligne de `TON_DOMAINE` → Modifier :

- **Dossier racine** : `caisse-resto/backend/public`  ← jamais la racine du projet
- **SSL** : coché (Let's Encrypt)
- **Version PHP** : 8.2 ou plus (selon l'écran, c'est ici ou dans l'onglet
  « Configuration PHP »)

> La modification multisite + le certificat SSL peuvent prendre quelques
> minutes à se propager.

## 7. Construire et envoyer le front (sur ton PC)

```powershell
cd D:\wamp64\www\caisse-resto
npm --prefix frontend run build
scp -r frontend/dist/* TON_LOGIN@SSH_HOTE:~/caisse-resto/backend/public/
```

## 8. Vérifications

1. `https://TON_DOMAINE/api/health` → doit répondre `{"status":"ok",…}`
2. `https://TON_DOMAINE` → écran **Accès terminal** :
   connexion `admin@baseapp.test` / `password`, puis PIN `1234`.

## 9. Sécurité immédiate (à faire tout de suite ⚠️)

Dans l'appli en ligne : PIN gérant → **Admin → Utilisateurs** :
1. **Change l'email et le mot de passe** du compte gérant.
2. **Change le PIN** `1234` et attribue les PIN des employés.
3. Configuration → renseigne le **N° TVA**.

## 10. Sauvegarde automatique (panel OVH → Cron)

Crée une tâche cron quotidienne (ex. 03:30), langage « Autre » :

```bash
/usr/local/php8.2/bin/php /home/TON_LOGIN/caisse-resto/backend/artisan db:backup --keep=14
```

Les sauvegardes tombent dans `caisse-resto/backend/storage/app/backups/`.
Télécharges-en une de temps en temps hors serveur.

---

## Mises à jour (à chaque évolution)

**Sur ton PC :**
```powershell
cd D:\wamp64\www\caisse-resto
git push
npm --prefix frontend run build
scp -r frontend/dist/* TON_LOGIN@SSH_HOTE:~/caisse-resto/backend/public/
```

**Sur le serveur (SSH) :**
```bash
cd ~/caisse-resto && git pull
cd backend && composer install --no-dev --optimize-autoloader
php artisan migrate --force
php artisan config:cache && php artisan route:cache
```

> Alternative en une commande depuis Git Bash/WSL (nécessite rsync) :
> `SSH_HOST="TON_LOGIN@SSH_HOTE" REMOTE_DIR="~/caisse-resto" ./scripts/deploy.sh`

## Dépannage rapide

| Symptôme | Piste |
|---|---|
| Page blanche / 500 | `cd ~/caisse-resto/backend && tail -50 storage/logs/laravel.log` |
| `/api/health` en 404 | Dossier racine multisite ≠ `backend/public` |
| Front ancien après mise à jour | Re-scp du `dist` + Ctrl+Shift+R |
| `php artisan` : version PHP trop vieille | utiliser `/usr/local/php8.2/bin/php artisan …` |
| Migrations « Nothing to migrate » après `git pull` | normal s'il n'y a pas de nouvelle migration |
