rebours/DEPLOY.md

203 lines
5.2 KiB
Markdown

# 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/
```