Salta ai contenuti

Distribuzione

Il progetto generato include un Dockerfile e un docker-compose.yml. Questo è il modo più semplice per la distribuzione:

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

Prima di distribuire in produzione, assicurati:

ElementoDettagli
JWT_SECRETUsa una stringa casuale crittograficamente forte (≥ 32 caratteri). Non riutilizzare mai tra ambienti.
DATABASE_URLUsa un’istanza Postgres gestita (Neon, Supabase, RDS) con TLS abilitato
CORSConfigura le origini consentite sul tuo backend se frontend e backend si trovano su domini diversi
Volumi di storageMonta volumi persistenti per gli upload di file. Oppure passa a S3 per la produzione.
HTTPSTermina TLS sul tuo reverse proxy (nginx, Cloudflare, load balancer)
RegistrazioneImposta ALLOW_REGISTRATION=false dopo aver creato il tuo account amministratore

In produzione, il backend può servire il frontend come una SPA statica:

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

Costruisci prima il frontend:

cd frontend && pnpm build

In questo modo devi distribuire un solo server che gestisce sia la SPA che l’API.

  1. Invia il tuo codice a un repository Git
  2. Collega il repository alla tua piattaforma cloud
  3. Imposta le variabili d’ambiente (DATABASE_URL, JWT_SECRET, ecc.)
  4. Il Dockerfile incluso verrà rilevato automaticamente
# 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

Se vuoi che Rebase venga eseguito su un sotto-percorso (es. /admin):

Frontend — Aggiorna il basename di BrowserRouter:

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

Backend — Aggiorna il percorso base:

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