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