# 🚀 Guide de déploiement — Namecheap cPanel

Guide étape par étape pour déployer **Residence Marrakech** sur votre hébergement Namecheap.

---

## ✅ Prérequis

- [x] Hébergement Namecheap avec **Node.js Selector** activé (Node 18+ disponible)
- [x] Nom de domaine pointant vers votre hébergement
- [x] Accès cPanel
- [x] Accès SSH (optionnel mais recommandé)

---

## Étape 1 — Préparer le package à uploader

Sur votre **Mac** (machine locale), dans le dossier du projet :

```bash
cd /Users/admin/Desktop/residence-marrakech

# Créer une archive sans node_modules / .next / dev.db (qui seront recréés sur le serveur)
zip -r ../residence-marrakech-deploy.zip . \
  -x "node_modules/*" \
  -x ".next/*" \
  -x ".git/*" \
  -x "prisma/dev.db*" \
  -x ".DS_Store" \
  -x "*.log"
```

L'archive `residence-marrakech-deploy.zip` est créée sur le Bureau.

---

## Étape 2 — Créer un sous-domaine (optionnel)

Pour héberger l'app sur `hotel.votredomaine.com` au lieu du domaine principal :

1. cPanel → **Domains** → **Subdomains**
2. Subdomain : `hotel`
3. Domain : `votredomaine.com`
4. Document Root : `/home/USER/hotel.votredomaine.com` (laissé par défaut)
5. **Create**

> 💡 Si vous voulez utiliser le **domaine principal**, sautez cette étape.

---

## Étape 3 — Uploader le code

### Option A — via File Manager cPanel

1. cPanel → **File Manager**
2. Aller dans `/home/USER/hotel.votredomaine.com` (ou le dossier du sous-domaine)
3. Cliquer **Upload** → uploader `residence-marrakech-deploy.zip`
4. Clic droit sur le ZIP → **Extract** dans ce dossier
5. Supprimer le ZIP après extraction

### Option B — via SSH (plus rapide)

```bash
# Depuis votre Mac
scp ~/Desktop/residence-marrakech-deploy.zip USER@votredomaine.com:~/

# Se connecter en SSH
ssh USER@votredomaine.com

# Extraire
cd ~/hotel.votredomaine.com
unzip ~/residence-marrakech-deploy.zip
rm ~/residence-marrakech-deploy.zip
```

---

## Étape 4 — Configurer l'application Node.js dans cPanel

1. cPanel → **Setup Node.js App** (ou **Node.js Selector**)
2. Cliquer **Create Application**
3. Remplir :

| Champ | Valeur |
|---|---|
| **Node.js version** | `20.x` (ou la plus récente disponible ≥ 18) |
| **Application mode** | `Production` |
| **Application root** | `hotel.votredomaine.com` (le dossier où vous avez extrait) |
| **Application URL** | `hotel.votredomaine.com` (ou votre domaine principal) |
| **Application startup file** | `server.js` |
| **Passenger log file** | laisser par défaut |

4. Cliquer **Create**

cPanel affiche maintenant une **commande à exécuter** (ressemblant à) :
```
source /home/USER/nodevenv/hotel.votredomaine.com/20/bin/activate && cd /home/USER/hotel.votredomaine.com
```

---

## Étape 5 — Installer les dépendances et builder

### Via SSH (recommandé)

```bash
ssh USER@votredomaine.com

# Activer l'environnement Node.js (commande affichée par cPanel)
source /home/USER/nodevenv/hotel.votredomaine.com/20/bin/activate
cd ~/hotel.votredomaine.com

# Configurer les variables d'environnement
cp .env.example .env
nano .env
```

Dans `.env`, mettre :

```env
# Base SQLite locale (la plus simple sur cPanel)
DATABASE_URL="file:./prisma/prod.db"
DIRECT_URL="file:./prisma/prod.db"

# IMPORTANT : générer un secret aléatoire fort
NEXTAUTH_SECRET="REMPLACEZ_PAR_UNE_CLE_GENEREE"
NEXTAUTH_URL="https://hotel.votredomaine.com"
AUTH_TRUST_HOST="true"

NODE_ENV="production"
```

Pour générer le secret :
```bash
node -e "console.log(require('crypto').randomBytes(32).toString('base64'))"
```
Copiez la chaîne obtenue dans `NEXTAUTH_SECRET`.

Sauvegarder (Ctrl+O, Entrée, Ctrl+X).

Puis lancer l'installation complète :

```bash
npm run deploy:install
```

Cette commande :
- Installe toutes les dépendances (~2 min)
- Génère le client Prisma
- Crée la base SQLite vide
- Build l'application Next.js (~3 min)

### Insérer les données de démonstration (1 seule fois)

```bash
npm run db:seed
```

---

## Étape 6 — Démarrer l'application

Dans cPanel → **Setup Node.js App** :

1. Trouvez votre application dans la liste
2. Cliquez **Restart** (ou ▶️ Start si elle n'est pas démarrée)
3. Attendez quelques secondes

L'application est maintenant accessible sur **https://hotel.votredomaine.com** 🎉

---

## Étape 7 — Activer le SSL (HTTPS)

1. cPanel → **SSL/TLS Status**
2. Cocher votre domaine `hotel.votredomaine.com`
3. Cliquer **Run AutoSSL** (Let's Encrypt gratuit)
4. Attendre 1-2 minutes — un certificat est installé automatiquement

Puis activez la redirection HTTPS dans `.htaccess` (décommentez les lignes au début).

---

## 🔐 Première connexion

Allez sur **https://hotel.votredomaine.com/login** et utilisez :

- **admin@residence-marrakech.ma** / `Admin123!`

⚠️ **IMPORTANT** : Changez le mot de passe admin immédiatement après la première connexion (Menu → Changer mon mot de passe).

---

## 🔧 Mises à jour ultérieures

Quand vous modifiez le code en local :

```bash
# Sur Mac : recréer le ZIP (sans la DB de prod !)
cd /Users/admin/Desktop/residence-marrakech
zip -r ../residence-marrakech-update.zip . \
  -x "node_modules/*" -x ".next/*" -x ".git/*" \
  -x "prisma/*.db*" -x ".env" -x ".DS_Store"
```

Sur le serveur :
```bash
# Sauvegarder l'ancien
cd ~/hotel.votredomaine.com
cp .env /tmp/.env.backup
cp prisma/prod.db /tmp/prod.db.backup

# Extraire le nouveau (en gardant la DB et .env)
unzip -o ~/residence-marrakech-update.zip

# Restaurer
cp /tmp/.env.backup .env
cp /tmp/prod.db.backup prisma/prod.db

# Rebuild
source /home/USER/nodevenv/hotel.votredomaine.com/20/bin/activate
npm install --production=false
npx prisma generate
npm run build
```

Puis dans cPanel → Restart Application.

---

## 🛠 Dépannage

### L'application ne démarre pas
- Vérifier les logs : cPanel → Setup Node.js App → cliquer sur l'app → onglet Logs
- Vérifier que `server.js` existe à la racine
- Vérifier que `NEXTAUTH_SECRET` est bien défini dans `.env`

### Erreur "Cannot find module 'next'"
- Les dépendances ne sont pas installées. Refaire `npm install` après avoir activé l'environnement Node.

### Erreur Prisma "Database file not found"
- Lancer `npx prisma db push` puis `npm run db:seed`

### Erreur 502 Bad Gateway
- L'app Node n'est pas démarrée. cPanel → Setup Node.js App → Restart

### CSS / JS ne se charge pas
- Le build n'a pas été fait : `npm run build`
- Vérifier que le dossier `.next/` existe

---

## 📞 Support

- **Logs Node.js** : `~/logs/passenger.log` ou via cPanel
- **Logs Apache** : cPanel → Errors
- Console du navigateur (F12) pour les erreurs côté client
