Skip to Content
InfraestructuraProducción

Infraestructura de producción

Arquitectura de despliegue del proyecto AsamaMX. Todos los servicios corren en Cloudflare con el dominio asamamx.com registrado en Hostinger.


Diagrama general

Hostinger (registrador) └── Nameservers → Cloudflare DNS Cloudflare DNS (asamamx.com) ├── asamamx.com / www → Cloudflare Pages (apps/web) ├── studio.asamamx.com → Cloudflare Pages (apps/studio) ├── docs.asamamx.com → Cloudflare Pages (apps/docs) └── api.asamamx.com → Cloudflare Workers (apps/worker) Sanity.io └── Accesible desde studio.asamamx.com

DNS

CampoValor
RegistradorHostinger
Nameserversaaden.ns.cloudflare.com, elly.ns.cloudflare.com
Gestión DNSCloudflare

Los registros de email (MX, SPF, DMARC, DKIM) apuntan a los servidores de Hostinger Mail y no deben modificarse.


Sanity Studio

CampoValor
URL producciónhttps://studio.asamamx.com
PlataformaCloudflare Pages
Proyecto Pagessanity-studio-asamamx
Ramamain
Build commandpnpm --filter @asamamx/studio build
Output directoryapps/studio/dist
Project ID Sanityver .env.local
Datasetproduction

Variables de entorno (Cloudflare Pages)

SANITY_STUDIO_API_PROJECT_ID= SANITY_STUDIO_API_DATASET=

Deploy

Cada push a main dispara un build automático en Cloudflare Pages. No se usa sanity deploy — el Studio está autoalojado en el subdominio propio.


Sitio web (apps/web)

CampoValor
URL producciónhttps://asamamx.com
PlataformaCloudflare Pages
Ramamain
Build commandpnpm --filter @asamamx/web build
Output directoryapps/web/out

Variables de entorno (Cloudflare Pages)

NEXT_PUBLIC_SANITY_PROJECT_ID= NEXT_PUBLIC_SANITY_DATASET= NEXT_PUBLIC_WORKER_URL= NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY= NEXT_PUBLIC_PAYPAL_CLIENT_ID= NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME= NEXT_PUBLIC_APP_URL=https://asamamx.com

Documentación (apps/docs)

CampoValor
URL producciónhttps://docs.asamamx.com
PlataformaCloudflare Pages
Ramamain
Build commandpnpm --filter @asamamx/docs build
Output directoryapps/docs/out

No requiere variables de entorno. El sitio es estático con búsqueda via Pagefind.


Worker (apps/worker)

CampoValor
PlataformaCloudflare Workers
URL producciónhttps://api.asamamx.com
Nombreasamamx-worker
Deploypnpm --filter @asamamx/worker deploy --env=production

1. Autenticación con Wrangler

Antes de subir secrets o hacer deploy, el desarrollador debe autenticarse con su cuenta de Cloudflare:

pnpm --filter @asamamx/worker exec wrangler login

Abre el navegador para completar el login. Solo se hace una vez por máquina. Para verificar la sesión activa:

pnpm --filter @asamamx/worker exec wrangler whoami

2. Configurar secrets

Los secrets se configuran una vez por entorno con wrangler secret put. Cada comando solicita el valor de forma interactiva:

pnpm --filter @asamamx/worker exec wrangler secret put JWT_SECRET --env=production pnpm --filter @asamamx/worker exec wrangler secret put SUPABASE_URL --env=production pnpm --filter @asamamx/worker exec wrangler secret put SUPABASE_SECRET_KEY --env=production pnpm --filter @asamamx/worker exec wrangler secret put PAYPAL_CLIENT_ID --env=production pnpm --filter @asamamx/worker exec wrangler secret put PAYPAL_CLIENT_SECRET --env=production pnpm --filter @asamamx/worker exec wrangler secret put RESEND_API_KEY --env=production

Si el Worker no existe aún en Cloudflare, Wrangler preguntará si deseas crearlo — confirmar con yes.

3. Variables por entorno (wrangler.toml)

Estas variables no son secretas y se versionan en wrangler.toml:

VariableDevProd
CORS_ORIGINhttp://localhost:3000https://asamamx.com
PAYPAL_API_URLhttps://api-m.sandbox.paypal.comhttps://api-m.paypal.com

4. Deploy

pnpm --filter @asamamx/worker deploy --env=production

Orden de despliegue

Al hacer un release completo desde cero, respetar este orden:

  1. Workerpnpm --filter @asamamx/worker deploy --env=production
  2. Studio → push a main (Cloudflare Pages lo buildea automáticamente)
  3. Web → push a main (necesita el Worker y Sanity activos para generateStaticParams)
  4. Docs → push a main (independiente, puede desplegarse en cualquier momento)
Last updated on