Aller au contenu

Déploiement

Le projet généré inclut un Dockerfile et un docker-compose.yml. C’est le moyen le plus simple de déployer :

services:
postgres:
image: postgres:16-alpine
environment:
POSTGRES_USER: rebase
POSTGRES_PASSWORD: rebase
POSTGRES_DB: rebase
volumes:
- pgdata:/var/lib/postgresql/data
ports:
- "5432:5432"
app:
build: ./backend
ports:
- "3001:3001"
environment:
DATABASE_URL: postgresql://rebase:rebase@postgres:5432/rebase
JWT_SECRET: ${JWT_SECRET}
NODE_ENV: production
depends_on:
- postgres
volumes:
- uploads:/app/uploads
volumes:
pgdata:
uploads:
docker compose up -d

Avant de déployer en production, assurez-vous :

ÉlémentDétails
JWT_SECRETUtilisez une chaîne aléatoire cryptographiquement forte (≥ 32 caractères). Ne jamais réutiliser entre les environnements.
DATABASE_URLUtilisez une instance Postgres gérée (Neon, Supabase, RDS) avec TLS activé
CORSConfigurez les origines autorisées sur votre backend si le frontend et le backend sont sur des domaines différents
Volumes de stockageMontez des volumes persistants pour les téléchargements de fichiers. Ou passez à S3 pour la production.
HTTPSTerminez le TLS au niveau de votre proxy inverse (nginx, Cloudflare, équilibreur de charge)
InscriptionDéfinissez ALLOW_REGISTRATION=false après avoir créé votre compte administrateur

En production, le backend peut servir le frontend comme une SPA statique :

import { serveSPA } from "@rebasepro/server-core";
// Après initializeRebaseBackend()
import path from "path";
// After initializeRebaseBackend()
serveSPA(app, { frontendPath: path.resolve(process.cwd(), "../frontend/dist") });

Construisez le frontend en premier :

cd frontend && pnpm build

De cette façon, vous n’avez besoin de déployer qu’un seul serveur qui gère à la fois le SPA et l’API.

  1. Poussez votre code vers un dépôt Git
  2. Connectez le dépôt à votre plateforme cloud
  3. Définissez les variables d’environnement (DATABASE_URL, JWT_SECRET, etc.)
  4. Le Dockerfile inclus sera auto-détecté
# Build the container
docker build -t gcr.io/YOUR_PROJECT/rebase-backend ./backend
# Push to Container Registry
docker push gcr.io/YOUR_PROJECT/rebase-backend
# Deploy
gcloud run deploy rebase-backend \
--image gcr.io/YOUR_PROJECT/rebase-backend \
--set-env-vars DATABASE_URL=...,JWT_SECRET=... \
--allow-unauthenticated

Si vous souhaitez que Rebase s’exécute à un sous-chemin (par exemple, /admin) :

Frontend — Mettez à jour le basename de BrowserRouter :

<BrowserRouter basename="/admin">
<App />
</BrowserRouter>

Backend — Mettez à jour le chemin de base :

await initializeRebaseBackend({
// ...
basePath: "/admin/api"
});