Ambientes Bajos (DEV + TEST)
Ambos ambientes corren en un mismo VPS Contabo gestionado con Coolify. Cada ambiente tiene sus propias instancias de los 6 servicios principales, aislados por subdominio y base de datos.
DEV + TEST Environments
Equipo DevDesarrollo local
Cloudflare Edge
DNS nvito.mxResolucion DNS
WAF + DDoS + SSLSeguridad perimetral
CF Access Zero TrustControl de acceso
Ambiente DEV
dev-api :3000NestJS API
dev-admin :5050Next.js Admin
dev-inv :3001Invitations SSG
dev-app :3002PWA BFF
Ambiente TEST
test-api :3000NestJS API
test-admin :5050Next.js Admin
test-inv :3001Invitations SSG
test-app :3002PWA BFF
Servicios Externos
Neon PG DEVPostgreSQL
Neon PG TESTPostgreSQL
Upstash RedisCache + Queues
MailtrapEmail sandbox
Clerk TestAuth provider
Cloudflare R2Object storage
GitLab CI/CDPipelines
Notas de los ambientes bajos
- Aislamiento por BD: DEV y TEST usan proyectos Neon separados. Redis comparte instancia Upstash pero con databases distintas (DB 0 y DB 1).
- Email sandbox: Mailtrap captura todos los correos sin enviarlos a usuarios reales.
- Clerk test keys: Autenticación funcional pero con credenciales de prueba.
- R2 buckets separados: Cada ambiente tiene sus propios buckets con prefijo
dev-nvito-*ytest-nvito-*. - CF Access: Protege el acceso a los subdominios de admin. Solo el equipo autorizado puede ingresar.
Producción
El ambiente de producción corre en Railway Pro con PostgreSQL gestionado y red privada interna. Cloudflare Pages sirve la landing y los docs. El API está protegido por un Worker de Cloudflare que inyecta un token de verificacion.
Production Environment
Usuarios publicosInternet
Equipo NvitoAdmin + Dev
Cloudflare Edge
DNS + SSLFull Strict
WAF + DDoSBot Fight Mode
Rate Limiting100 req/min
Worker ProxyX-CF-API-Token
CF AccessZero Trust
Servicios en Cloudflare
nvito.mx LandingAstro
docs.nvito.mxNext.js MDX
cdn.nvito.mx R24 buckets
Zona Publica (Railway)
admin.nvito.mxNext.js :5050
inv.nvito.mxSSG/ISR :3001
app.nvito.mxPWA BFF :3002
API Protegida
nvito-api :3000NestJS + Prisma
Capa de Datos
PostgreSQL RailwayRed privada interna
Servicios Externos
Upstash RedisCache + Queues
Resendsend.nvito.mx
Clerk AuthOAuth + JWT
CF Email Routing*@nvito.mx
GitLab CI/CDPipelines
Patron de zonas
| Zona | Significado | Ejemplos |
|---|---|---|
| Cloudflare Edge | Capa de seguridad perimetral: DNS, WAF, DDoS, SSL, rate limiting | DNS, WAF, Worker Proxy, CF Access |
| Cloudflare Pages | Sitios estáticos servidos desde el edge global | Landing (Astro), Docs (Next.js MDX) |
| Cloudflare R2 | Almacenamiento de objetos para media y templates | cdn.nvito.mx (4 buckets) |
| Railway Pro | Compute de producción con red privada interna | API, Admin, Invitations, PWA, PostgreSQL |
| Servicios Externos | SaaS de terceros consumidos por el API | Upstash Redis, Resend, Clerk |
| VPS Contabo | Compute de ambientes bajos (DEV + TEST) | Coolify con containers Docker |
Flujo de un request público
- El usuario accede a
inv.nvito.mx/mi-bodadesde su navegador - Cloudflare DNS resuelve el dominio y aplica SSL/TLS Full Strict
- WAF evalua el request (DDoS, bot detection, reglas custom)
- Rate limiting verifica que no exceda 100 req/min por IP
- El request llega a Railway donde nvito-invitations lo procesa
- nvito-invitations hace fetch al API interno (red privada Railway)
- El API consulta PostgreSQL y retorna los datos de la invitación
- nvito-invitations genera el HTML y lo sirve al usuario
Flujo de un request admin
- Un miembro del equipo accede a
admin.nvito.mx - Cloudflare DNS resuelve y aplica SSL/TLS
- CF Access intercepta el request y solicita autenticación OTP
- Una vez verificado, el request llega a nvito-admin en Railway
- nvito-admin renderiza la página con autenticación Clerk
- Las llamadas al API pasan por el Worker Proxy de Cloudflare
- El Worker inyecta el header
X-CF-API-Tokeny forward a nvito-api CloudflareTokenGuardvalida el token,ClerkAuthGuardvalida la sesion,RoleGuardverifica permisos
Flujo de email transaccional
- nvito-api encola un trabajo en Bull Queue (Redis Upstash)
- El processor de email toma el trabajo y renderiza el template
- El email se envia via Resend API con dominio verificado
send.nvito.mx - Resend entrega el correo al servidor de correo del destinatario
- El invitado recibe el email con remitente
@send.nvito.mx
Flujo de correo corporativo
- Un usuario externo envia un email a
hola@nvito.mx - Cloudflare Email Routing recibe el correo en el edge
- La regla de routing reenvio el correo a
nvito.hq@gmail.com - Aplica para todas las direcciones configuradas:
hola@,soporte@,contacto@
Puertos por servicio
| Servicio | Puerto | Descripción |
|---|---|---|
| nvito-api | 3000 | API REST NestJS — backend principal |
| nvito-invitations | 3001 | Invitaciones públicas SSG/ISR |
| nvito-pwa | 3002 | Progressive Web App con BFF |
| nvito-admin | 5050 | Panel de administración |
| nvito-docs | 3333 | Hub de documentación |
| nvito-landing | 4321 | Landing page (dev) |
Tabla resumen de servicios
| Servicio | Proveedor | Dominio | Acceso | Stack |
|---|---|---|---|---|
| nvito-api | Railway Pro | (interno, sin dominio público) | Privado (via CF Worker) | NestJS 11 + Prisma |
| nvito-admin | Railway Pro | admin.nvito.mx | Protegido (CF Access) | Next.js 16 |
| nvito-invitations | Railway Pro | inv.nvito.mx | Publico | Next.js 16 SSG/ISR |
| nvito-pwa | Railway Pro | app.nvito.mx | Publico | Next.js 16 BFF |
| nvito-landing | Cloudflare Pages | nvito.mx | Publico | Astro 5 |
| nvito-docs | Cloudflare Pages | docs.nvito.mx | Protegido (CF Access) | Next.js 16 MDX |
| PostgreSQL | Railway Pro | (red privada) | Privado | PostgreSQL managed |
| Redis | Upstash | (SaaS) | Privado | Redis serverless |
| Storage | Cloudflare R2 | cdn.nvito.mx | Publico (lectura) | Object storage |
| Email transaccional | Resend | send.nvito.mx | Privado (API) | SMTP/API |
| Email corporativo | Cloudflare | *@nvito.mx | Publico (recepción) | Email Routing |
| Auth | Clerk | (SaaS) | Privado (API) | OAuth + JWT |