203 lines
5.2 KiB
Markdown
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/
|
|
```
|