rebours/DEPLOY.md

5.2 KiB

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

docker compose up -d

PostgreSQL sera accessible sur localhost:5432 avec :

  • DB: rebours
  • User: rebours
  • Password: rebours

2. Configurer le .env

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

Variables dev minimales :

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

# 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

pnpm dev

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 ResourceDocker 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 :

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

Ou dans le terminal Coolify du service fastify :

node prisma/seed.mjs

6. Vérifier


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

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

# Modifier prisma/schema.prisma puis :
pnpm db:migrate
# Commit le dossier prisma/migrations/