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)
- Crear VM en OCI Always Free (4 OCPU, 24 GB, 150 GB disco, Ubuntu ARM64) — seguir
vps-coolify-setup.md. - Instalar Coolify en el VPS.
- Delegar
metabolics.appa Cloudflare (mover nameservers). - Configurar Cloudflare:
- SSL/TLS = Full (strict)
- Always Use HTTPS = ON
- 6 Transform Rules de headers de seguridad (ver
vps-coolify-setup.md)
- Crear app en Coolify:
- Source: GitHub (repo
josesepulvedapino/metabolics-app, branchmain) - Build pack: nixpacks
- Port: 3000
- FQDN staging:
staging.<IP>.sslip.io
- Source: GitHub (repo
- Configurar env vars desde
.env.examplecon valores reales de Supabase managed. - Deploy staging → validar HTTP 200 + cert Let's Encrypt.
- Configurar dominio prod:
- DNS A:
metabolics.app→ IP VPS, DNS only al principio. - Agregar dominio en Coolify.
- Trigger redeploy.
- DNS A:
- Pasar a Proxied en Cloudflare (DDoS protection).
- Configurar Supabase prod (crear proyecto en Supabase Cloud, migrar schema, configurar RLS).
- Configurar Resend con dominio
send.metabolics.app(DKIM + SPF en Cloudflare). - Configurar Umami en subdominio
analytics.metabolics.app. - Configurar monitoring:
- Script
/opt/vps-monitor/check.shcon checks para metabolics.app - UptimeRobot externo
- Script
Checklist pre-deploy
Antes de hacer push a main:
-
pnpm checkpasa -
pnpm buildno falla - Env vars críticas configuradas en Coolify
- Si hay cambios de schema,
pnpm db:generatecommiteado - Si hay nuevas env vars, agregadas a
.env.example
Estrategia de rollback
Coolify mantiene la versión anterior deployada. Si un deploy rompe:
- UI Coolify → Deployments → click en el deploy anterior → Redeploy
- 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
.envde 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).