# REBOURS — Guide de déploiement

## Architecture

```
Internet → Traefik (Coolify, SSL auto)
             ├── /api/*, /admin/* → Fastify (Node.js + AdminJS)
             │                        └── PostgreSQL
             └── /* → Nginx (fichiers statiques Astro)
```

---

## Environnement de développement

### Prérequis
- Node.js >= 22
- Docker (pour PostgreSQL local)
- pnpm

### 1. Lancer PostgreSQL

```bash
docker compose up -d
```

PostgreSQL sera accessible sur `localhost:5432` avec :
- DB: `rebours`
- User: `rebours`
- Password: `rebours`

### 2. Configurer le `.env`

```bash
cp .env.example .env
# Éditer les valeurs (Stripe keys, etc.)
```

Variables dev minimales :
```env
STRIPE_SECRET_KEY=sk_test_...
STRIPE_WEBHOOK_SECRET=whsec_...
DOMAIN=http://localhost:4321
PORT=8888
DATABASE_URL=postgresql://rebours:rebours@localhost:5432/rebours
ADMIN_EMAIL=admin@rebours.studio
ADMIN_PASSWORD=changeme
COOKIE_SECRET=dev-cookie-secret-at-least-32-characters-long
```

### 3. Initialiser la base de données

```bash
# Première fois : créer les tables
pnpm db:migrate

# Insérer les produits et le compte admin
pnpm db:seed
```

### 4. Lancer le projet

```bash
pnpm dev
```

- Site : http://localhost:4321
- Admin : http://localhost:4321/admin (proxié vers Fastify :8888)
- Prisma Studio : `pnpm db:studio` → http://localhost:5555

### Commandes utiles

| Commande | Description |
|----------|-------------|
| `pnpm dev` | Astro dev + Fastify (hot reload) |
| `pnpm build` | Build statique (prisma generate + astro build) |
| `pnpm db:migrate` | Créer/appliquer les migrations |
| `pnpm db:seed` | Seeder les produits + admin |
| `pnpm db:studio` | Prisma Studio (UI pour la DB) |
| `docker compose up -d` | Lancer PostgreSQL local |
| `docker compose down` | Stopper PostgreSQL local |

---

## Déploiement sur Coolify

### Prérequis
- Un serveur avec Coolify installé
- Un domaine pointant vers le serveur (rebours.studio)

### 1. Créer la ressource sur Coolify

1. **New Resource** → **Docker Compose**
2. **Source** : connecter le repo Git
3. **Compose file** : sélectionner `docker-compose.prod.yml`

### 2. Configurer les variables d'environnement

Dans l'onglet **Environment Variables** de Coolify, ajouter :

| Variable | Valeur | Build Variable ? |
|----------|--------|:---:|
| `DATABASE_URL` | `postgresql://rebours:MOT_DE_PASSE@postgres:5432/rebours` | Oui |
| `POSTGRES_PASSWORD` | `MOT_DE_PASSE` (même que dans DATABASE_URL) | Non |
| `STRIPE_SECRET_KEY` | `sk_live_...` | Non |
| `STRIPE_WEBHOOK_SECRET` | `whsec_...` | Non |
| `DOMAIN` | `https://rebours.studio` | Non |
| `PORT` | `3000` | Non |
| `ADMIN_EMAIL` | `admin@rebours.studio` | Non |
| `ADMIN_PASSWORD` | `MOT_DE_PASSE_ADMIN` | Non |
| `COOKIE_SECRET` | Chaîne aléatoire 64 chars | Non |

> `DATABASE_URL` doit être coché **Build Variable** car `astro build` en a besoin pour requêter les produits au build time.

### 3. Configurer les domaines

Dans l'onglet **Domains** :
- Service `nginx` : `rebours.studio` (port 80)
- Service `fastify` : `rebours.studio` (port 3000)

Coolify générera automatiquement les labels Traefik. Si tu utilises les labels du `docker-compose.prod.yml`, assure-toi qu'ils ne sont pas en conflit avec ceux générés par Coolify.

### 4. Déployer

Cliquer **Deploy**. Coolify va :
1. Builder l'image Docker (install deps + prisma generate + astro build)
2. Démarrer PostgreSQL + attendre le healthcheck
3. Démarrer Fastify (qui lance `prisma migrate deploy` automatiquement)
4. Démarrer Nginx (qui sert les fichiers statiques)

### 5. Seeder la base (première fois)

Après le premier déploiement, exécuter le seed dans le container Fastify :

```bash
# Via Coolify terminal ou SSH
docker exec -it <container-fastify> sh -c "node prisma/seed.mjs"
```

Ou dans le terminal Coolify du service `fastify` :
```bash
node prisma/seed.mjs
```

### 6. Vérifier

- Site : https://rebours.studio
- Admin : https://rebours.studio/admin
- Login avec `ADMIN_EMAIL` / `ADMIN_PASSWORD`

---

## Fonctionnement de l'auto-build

Quand tu modifies un produit dans l'admin (`/admin`) :
1. AdminJS sauvegarde en DB (PostgreSQL)
2. Un hook `after` déclenche `pnpm build` (debounce 5s)
3. Astro rebuild les pages statiques depuis la DB
4. Les fichiers `dist/` sont écrits dans le volume partagé
5. Nginx sert les nouvelles pages immédiatement

> En dev (`NODE_ENV !== production`), le build auto est désactivé.

---

## Stripe

### Webhook en production

Le webhook doit pointer vers :
```
https://rebours.studio/api/webhook
```

Events écoutés : `checkout.session.completed`

### Ajouter un produit achetable

1. Créer le prix dans le **Dashboard Stripe**
2. Dans l'admin `/admin` → Products → éditer le produit
3. Remplir `stripePriceId` avec le `price_xxx` de Stripe
4. Remplir `stripeKey` avec l'identifiant utilisé par le front (ex: `mon_produit`)
5. Le rebuild auto mettra à jour le site

---

## Migrations DB

### En dev
```bash
pnpm db:migrate
```

### En prod (automatique)
Le `CMD` du Dockerfile exécute `prisma migrate deploy` au démarrage du container. Les nouvelles migrations sont appliquées automatiquement à chaque déploiement.

### Ajouter une migration manuellement
```bash
# Modifier prisma/schema.prisma puis :
pnpm db:migrate
# Commit le dossier prisma/migrations/
```
