# Déploiement o2switch

L'API fonctionne sur hébergement mutualisé Apache/PHP : pas besoin de `php -S`,
le dossier `public/` devient le document root du sous-domaine.

## Structure sur le serveur

```
~/schpountzi/            ← upload du dossier backend/ complet
├── controllers/
├── models/
├── migrations/
├── public/              ← document root du sous-domaine
├── uploads/             ← hors docroot (fichiers servis via /api/v1/files/)
├── .env                 ← créé sur le serveur (jamais commité)
└── ...
```

## Étapes

### 1. Base de données (cPanel)

- **Bases de données MySQL** → créer `COMPTE_schpountzi`
- Créer utilisateur `COMPTE_schp` + mot de passe fort → **Tous les privilèges** sur la base
- **phpMyAdmin** → sélectionner la base → **Importer** `migrations/001_schema.sql`

### 2. Fichiers

- FTP (FileZilla) ou Gestionnaire de fichiers cPanel
- Envoyer le contenu de `backend/` dans `~/schpountzi/` (**pas** dans `public_html`)

### 3. Sous-domaine

- cPanel → **Domaines** → créer `api.mondomaine.fr`
- **Document root : `schpountzi/public`** ← important, jamais le dossier racine
- HTTPS : AutoSSL (Let's Encrypt) s'active seul sous ~15 min sur o2switch

### 4. PHP 8.2+

- cPanel → **MultiPHP Manager** → sélectionner PHP ≥ 8.2 pour `api.mondomaine.fr`
- Extensions requises (présentes par défaut) : `pdo_mysql`, `fileinfo`, `mbstring`, `gd`

### 5. `.env` sur le serveur (`~/schpountzi/.env`)

```env
APP_ENV=production
APP_URL=https://api.mondomaine.fr
MIGRATE_TOKEN=chaîne-longue-aléatoire

DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=COMPTE_schpountzi
DB_USERNAME=COMPTE_schp
DB_PASSWORD=le-mot-de-passe

ACCESS_TOKEN_TTL=3600
REFRESH_TOKEN_TTL=2592000

CORS_ORIGIN=*
UPLOAD_DIR=../uploads
MAX_UPLOAD_SIZE=5242880
```

(`CORS_ORIGIN=*` acceptable : l'app native n'est pas un navigateur.)

### 6. Vérification

```
curl https://api.mondomaine.fr/api/v1/health
→ {"success":true,"data":{"status":"ok"},"message":null}
```

## Brancher l'app

- `mobile/eas.json` → `production.env.EXPO_PUBLIC_API_URL` = `https://api.mondomaine.fr/api/v1`
- `mobile/.env` → `EXPO_PUBLIC_API_URL` = même URL (teste l'app en ligne depuis le LAN ou la 4G)

## Dépannage

| Symptôme | Cause probable |
|---|---|
| 500 sur tout | `.env` absent/mal nommé, ou PHP < 8.2 |
| 404 sur les routes | docroot pointe sur `public` ? mod_rewrite actif ? |
| 401 malgré Bearer | header `Authorization` perdu → vérifier le bloc `SetEnvIf` du `.htaccess` |
| Upload échoue | `uploads/` non inscriptible → chmod 755 |
