rocket_launch Deploy

Despliega en cualquier lugar.

PgStudio Gateway funciona en Docker, Kubernetes, Railway, Fly.io, Vercel + API externa, o cualquier VPS con Docker instalado. Elige la plataforma que mejor se adapte a tu infraestructura.

view_in_ar

Docker Compose — Stack completo

La opción recomendada para self-hosted. Levanta nginx, API y una base de datos de metadatos PostgreSQL en red interna.

RECOMENDADO
docker-compose.yml
# Copia y configura las variables de entorno
cp .env.production.example .env.production

# Levanta el stack
docker compose --env-file .env.production \
  -f docker/docker-compose.yml up -d --build

# Con base de datos de metadatos externa
docker compose --env-file .env.production \
  -f docker/docker-compose.external-db.yml up -d --build
deployed_code

Contenedor All-in-One

Una única imagen Docker que incluye nginx, API y la Angular app. Ideal para PaaS como Railway o Fly.io.

all-in-one.Dockerfile
# Construir imagen
docker build -f docker/all-in-one.Dockerfile \
  -t pgstudio/all-in-one:local .

# Ejecutar localmente
docker run --rm -p 8080:8080 \
  -e NODE_ENV=production \
  -e DATABASE_URL="postgresql://user:password@host:5432/pgstudio" \
  -e JWT_SECRET="replace-with-32-plus-random-chars" \
  -e JWT_REFRESH_SECRET="replace-with-other-32-plus-random-chars" \
  -e CREDENTIALS_ENCRYPTION_KEY="replace-with-32-plus-random-chars" \
  -e CORS_ORIGIN="http://localhost:8080" \
  pgstudio/all-in-one:local
train

Railway

Un servicio PgStudio (all-in-one) más un servicio PostgreSQL de Railway para los metadatos internos.

railway.json + variables
# 1. Crea un servicio PostgreSQL en Railway
# 2. Crea un servicio desde este repositorio
# 3. Usa deploy/railway/railway.json como Config as Code
# 4. Configura las variables en el servicio PgStudio:

NODE_ENV=production
API_PORT=3000
DATABASE_URL=$${{Postgres.DATABASE_URL}}
            JWT_SECRET=<64+ random chars>
JWT_REFRESH_SECRET=<different 64+ random chars>
CREDENTIALS_ENCRYPTION_KEY=<64+ random chars>
CORS_ORIGIN=https://<your-railway-domain>
flight

Fly.io

Despliegue global en edge con auto-start/stop. Usa el all-in-one Dockerfile y adjunta una base de datos de Fly Postgres.

fly.toml
# Copia y ajusta el nombre de app
cp deploy/fly/fly.toml.example fly.toml

# Crea y adjunta la base de datos de metadatos
fly postgres create
fly postgres attach <postgres-app-name>

# Configura los secretos
fly secrets set \
  JWT_SECRET=<random> \
  JWT_REFRESH_SECRET=<random> \
  CREDENTIALS_ENCRYPTION_KEY=<random>

# Despliega
fly deploy -c deploy/fly/fly.toml
fly.toml.example
app = "pgstudio"
primary_region = "mad"

[build]
  dockerfile = "docker/all-in-one.Dockerfile"

[http_service]
  internal_port = 8080
  force_https = true
  auto_stop_machines = "stop"
  min_machines_running = 1

[[vm]]
  cpu_kind = "shared"
  cpus = 1
  memory_mb = 1024
layers

Vercel (solo frontend)

Vercel sirve únicamente el frontend Angular. El API debe correr en un backend persistente (Railway, Fly.io, Docker Compose, VPS).

warning API requerida por separado
vercel.json
# 1. Despliega el API en Railway, Fly.io o Docker Compose
# 2. Copia vercel.json.example y reemplaza el host del API
cp deploy/vercel/vercel.json.example vercel.json

# 3. Importa el repositorio en Vercel
# 4. Vercel reescribe /api/* y /socket.io/* al API externo
hub

Kubernetes / Helm

Chart Helm en deploy/helm/pgstudio. Despliega API, web y opcionalmente PostgreSQL con Ingress configurable.

helm install
# Con base de datos interna
helm upgrade --install pgstudio deploy/helm/pgstudio \
  --set secrets.jwtSecret="$(node -e "...")"\ 
  --set secrets.jwtRefreshSecret="$(node -e "...")"\ 
  --set secrets.credentialsEncryptionKey="$(node -e "...")"\ 
  --set postgres.auth.password="$(node -e "...")"

# Con base de datos de metadatos externa
helm upgrade --install pgstudio deploy/helm/pgstudio \
  --set postgres.enabled=false \
  --set secrets.databaseUrl="postgresql://..." \
  --set config.corsOrigin="https://pgstudio.example.com" \
  --set ingress.enabled=true \
  --set ingress.host="pgstudio.example.com"

¿Necesitas el modo Self-Hosted detallado?

Variables de entorno, arquitectura de servicios e instaladores automáticos.