← index

DEPLOY

docs/DEPLOY.md

Deploy

Pendiente — el VPS (Oracle Cloud Always Free con Coolify) aún no se ha creado. La guía de setup del VPS está en vps-coolify-setup.md en la raíz.

Cuando exista el VPS, este doc se actualiza con el flujo concreto de deploy.

Estado actual

  • ❌ VPS Oracle Cloud (no creado)
  • ❌ Coolify instalado (no instalado)
  • ❌ DNS de metabolics.app (no delegado a Cloudflare todavía)
  • ❌ Wildcard cert de Let's Encrypt (no emitido)
  • ❌ Primer deploy (no hecho)

Target de deploy (cuando exista)

Cloudflare (proxy + DDoS + WAF)
  └─ Traefik (Coolify)
      └─ SvelteKit (adapter-node, puerto 3000)
          ├─ /(marketing) — landing
          ├─ /(app) — panel nutricionista
          ├─ /(patient) — app paciente
          └─ /auth/* — login/signup/callback

Pasos planeados (resumen — completar cuando se cree el VPS)

  1. Crear VM en OCI Always Free (4 OCPU, 24 GB, 150 GB disco, Ubuntu ARM64) — seguir vps-coolify-setup.md.
  2. Instalar Coolify en el VPS.
  3. Delegar metabolics.app a Cloudflare (mover nameservers).
  4. Configurar Cloudflare:
    • SSL/TLS = Full (strict)
    • Always Use HTTPS = ON
    • 6 Transform Rules de headers de seguridad (ver vps-coolify-setup.md)
  5. Crear app en Coolify:
    • Source: GitHub (repo josesepulvedapino/metabolics-app, branch main)
    • Build pack: nixpacks
    • Port: 3000
    • FQDN staging: staging.<IP>.sslip.io
  6. Configurar env vars desde .env.example con valores reales de Supabase managed.
  7. Deploy staging → validar HTTP 200 + cert Let's Encrypt.
  8. Configurar dominio prod:
    • DNS A: metabolics.app → IP VPS, DNS only al principio.
    • Agregar dominio en Coolify.
    • Trigger redeploy.
  9. Pasar a Proxied en Cloudflare (DDoS protection).
  10. Configurar Supabase prod (crear proyecto en Supabase Cloud, migrar schema, configurar RLS).
  11. Configurar Resend con dominio send.metabolics.app (DKIM + SPF en Cloudflare).
  12. Configurar Umami en subdominio analytics.metabolics.app.
  13. Configurar monitoring:
    • Script /opt/vps-monitor/check.sh con checks para metabolics.app
    • UptimeRobot externo

Checklist pre-deploy

Antes de hacer push a main:

  • pnpm check pasa
  • pnpm build no falla
  • Env vars críticas configuradas en Coolify
  • Si hay cambios de schema, pnpm db:generate commiteado
  • Si hay nuevas env vars, agregadas a .env.example

Estrategia de rollback

Coolify mantiene la versión anterior deployada. Si un deploy rompe:

  1. UI Coolify → Deployments → click en el deploy anterior → Redeploy
  2. Tardar ~2-3 min, vuelve al estado anterior

Env vars requeridas en Coolify

Ver .env.example en la raíz. Las mínimas para arrancar:

PUBLIC_APP_URL
PUBLIC_SUPABASE_URL
PUBLIC_SUPABASE_ANON_KEY
DATABASE_URL
SUPABASE_SERVICE_ROLE_KEY
ORIGIN
PROTOCOL_HEADER
HOST_HEADER

Opcionales (se pueden agregar después):

RESEND_API_KEY
RESEND_FROM_EMAIL
PUBLIC_UMAMI_URL
PUBLIC_UMAMI_WEBSITE_ID

Dominios planeados

Dominio Uso DNS inicial
metabolics.app Landing Proxied
app.metabolics.app Panel nutricionista Proxied
paciente.metabolics.app App paciente Proxied
auth.metabolics.app Auth pages (opcional) Proxied
analytics.metabolics.app Umami DNS only
send.metabolics.app Resend DKIM DNS only
*.metabolics.app Páginas públicas de profesionales Proxied

Una vez deployado

  • Validar HTTPS funciona
  • Validar headers de seguridad (securityheaders.com score A)
  • Validar auto-deploy desde GitHub (push a main → redeploy)
  • Validar backup del .env de Coolify en password manager
  • Agregar al script de monitoreo del VPS
  • Agregar monitor en UptimeRobot

Cuando se cree el VPS y se haga el primer deploy, este doc se completa con los detalles reales (OCIDs, app UUIDs, etc).