# Déployer le backend (API Block Rush) sur cPanel

Le backend est une application **Node.js (Next.js)** avec une base **MySQL**.
cPanel l'héberge via l'outil **« Setup Node.js App »** (Passenger), présent sur la
plupart des hébergements mutualisés cPanel (Hostinger, o2switch, PlanetHoster…).

---

## 1. Créer la base de données MySQL

Dans cPanel :

1. **Bases de données MySQL** → crée une base, ex. `moncompte_tetris`.
2. Crée un utilisateur, ex. `moncompte_block` + mot de passe fort.
3. **Ajoute l'utilisateur à la base** avec *ALL PRIVILEGES*.

> ⚠️ Sur cPanel, le nom de l'hôte MySQL est toujours `localhost`.

## 2. Téléverser le projet

## Mode recommandé : build standalone (déjà préparé)

Le projet est configuré avec `output: 'standalone'`. Le dossier
`deploy-cpanel/blockrush-api/` (et son zip) contient **déjà l'app compilée** :
inutile de build sur cPanel.

- Uploade le contenu du dossier (ou `blockrush-api.zip`) dans
  `/home/moncompte/blockrush-api` et extrait-le.
- Le startup file reste **`server.js`** (présent à la racine du dossier).

## Mode alternatif : upload des sources

Via le **Gestionnaire de fichiers** ou Git (cPanel → Git™ Version Control) :

- Uploade tout le projet **sauf** `node_modules`, `.next` et `.env`.
- Dossier cible recommandé : `/home/moncompte/blockrush-api`.

Fichiers essentiels : `package.json`, `next.config.ts`, `src/`,
`public/`, `scripts/`, `tsconfig.json`.

## 3. Créer l'application Node.js

cPanel → **Setup Node.js App** → *Create Application* :

| Champ | Valeur |
|---|---|
| Node.js version | 20.x ou 22.x |
| Application mode | **Production** |
| Application root | `blockrush-api` |
| Application URL | ton domaine ou sous-domaine (ex. `api.mondomaine.com`) |
| Application startup file | **`server.js`** |

## 4. Variables d'environnement

Dans la même page, section *Environment variables*, ajoute :

```
DATABASE_URL = mysql://moncompte_block:MOTDEPASSE@localhost:3306/moncompte_tetris
NODE_ENV     = production
```

## 5. Installer et construire

**Si tu as uploadé le build standalone** (section 2, mode recommandé), rien à
faire ici — passe à l'étape 6.

Sinon (upload des sources), cPanel → **Terminal** :

```bash
cd ~/blockrush-api
npm install
npm run build
```

## 6. Créer les tables MySQL

Depuis le Terminal cPanel (la base est vide au départ) :

```bash
cd ~/blockrush-api
# adapter les identifiants dans le script, puis :
node create-table.cjs        # (inclus à la racine dans le zip standalone)
# ou, si tu as uploadé les sources :
node scripts/create-table.cjs
node scripts/migrate-game-mode.cjs
```

> Les scripts utilisent `localhost` / utilisateur MySQL cPanel (section 1),
> **pas** `root`. Modifie le haut du script si besoin.

## 7. Redémarrer l'application

Retourne dans **Setup Node.js App** → bouton **Restart**.
Vérifie : `https://api.mondomaine.com/api/players` doit renvoyer du JSON.

## 8. Pointer l'application mobile

Dans `mobile/lib/api_client.dart`, mets l'URL de production :

```dart
const String defaultApiBase = 'https://api.mondomaine.com';
```

Puis régénère l'APK (`flutter build apk --release --split-per-abi`).
**Important :** utilise toujours `https://` (Android bloque le HTTP clair par
défaut). Vérifie qu'un certificat SSL (AutoSSL/Let's Encrypt) est actif sur le
domaine dans cPanel.

---

## Dépannage

| Symptôme | Solution |
|---|---|
| Page 503 / erreur Passenger | Consulte les logs : `~/logs/` ou l'onglet *Log* de l'app Node |
| `DATABASE_URL is required` | Variable d'environnement absente → section 4 puis *Restart* |
| `ECONNREFUSED` / erreur SQL | Utilisateur MySQL non lié à la base, ou mot de passe erroné |
| Build échoue (mémoire) | Sur mutualisé, construis en local (`npm run build`) puis uploade aussi le dossier `.next` |
| Erreur 404 sur /api | Startup file ≠ `server.js` ou app non redémarrée |
