Vision General
Ambiente Local (Docker Compose)
Ambiente DEV (VPS + Coolify)
Ambiente TEST (VPS + Coolify)
Ambiente PROD (Railway Pro)
Tabla Comparativa de Ambientes
Variables de Entorno por Ambiente
Nvito opera en 4 ambientes que reflejan el ciclo de vida del codigo desde el desarrollo hasta produccion. Cada ambiente tiene su propia infraestructura de datos (BD, Redis, Storage, Email) y subdominios independientes.
Ambiente Branch Proposito Usuarios Hosting Local cualquiera Desarrollo individual, debugging, iteracion rapida Desarrolladores Docker Compose (maquina local) DEV developIntegracion continua, validacion de features Desarrolladores VPS Contabo + Coolify TEST testQA formal, pruebas de regresion, demos a stakeholders QA + stakeholders VPS Contabo + Coolify PROD mainProduccion real con usuarios finales Todos Railway Pro + Cloudflare
El ambiente local replica toda la infraestructura de Nvito en la maquina del desarrollador usando Docker Compose. Permite trabajar sin conexion a internet y con iteraciones rapidas.
Servicio Imagen Puerto(s) Funcion Datos persisten postgres postgres:15-alpine5432Base de datos principal (Prisma ORM) Si (volumen externo) redis redis:7-alpine6379Cache, Bull queues, rate limiting Si (volumen externo, AOF) minio minio/minio:latest9000 (API), 9001 (Console)Storage S3-compatible (reemplaza R2) Si (volumen externo) minio-client minio/mc:latest— Crea 4 buckets automaticamente al iniciar N/A maildev maildev/maildev:latest1080 (Web UI), 1025 (SMTP)Servidor SMTP local (reemplaza Mailtrap) No (efimero) adminer adminer:latest8080UI web para gestion de PostgreSQL No (efimero)
Aplicacion Puerto Comando Descripcion nvito-api 3000 npm run start:devBackend NestJS con hot reload nvito-admin 5050 npm run devPanel admin Next.js nvito-invitations 3001 npm run devServidor de invitaciones nvito-pwa 3002 npm run devProgressive Web App nvito-docs 3333 npm run devHub de documentacion
# 1. Crear volumenes Docker (una sola vez)
docker volume create invitia-api_postgres_data
docker volume create invitia-api_redis_data
docker volume create invitia-api_minio_data
# 2. Levantar infraestructura
cd nvito-api
docker compose up -d
# 3. Verificar que todos los servicios estan healthy
docker compose ps
# 4. Aplicar migraciones de BD
npx prisma migrate deploy
# 5. Iniciar la aplicacion
npm run start:dev
Servicio Usuario Password URL de acceso PostgreSQL nvitonvito_dev_passwordpostgresql://nvito:nvito_dev_password@localhost:5432/nvito_devRedis — — (sin auth) redis://localhost:6379MinIO minioadminminioadmin123http://localhost:9001 (Console)MailDev — — http://localhost:1080 (Web UI)Adminer nvitonvito_dev_passwordhttp://localhost:8080
El servicio minio-client crea automaticamente 4 buckets al iniciar:
Bucket Acceso publico Contenido nvito-uploadsSi Fotos de galeria, avatares, logos nvito-assetsSi Assets estaticos de invitaciones nvito-privateNo Contratos, documentos internos nvito-templatesSi Templates HTML compilados de invitaciones
Clerk requiere internet
Clerk Auth siempre se conecta a la nube (no hay modo offline). Las claves pk_test_ y sk_test_ del modo desarrollo de Clerk son necesarias incluso en local. Es el unico servicio externo obligatorio.
El ambiente DEV refleja la rama develop y se usa para integracion continua. Los desarrolladores ven aqui sus cambios desplegados automaticamente despues de cada push.
Componente Proveedor Detalle Hosting VPS Contabo (Cloud VPS 10) 4 vCPU, 8 GB RAM, 150 GB SSD, Ubuntu 22.04 IP 212.28.185.197Compartida con TEST PaaS Coolify v4 Gestion de contenedores Docker Reverse Proxy Traefik Integrado en Coolify, SSL Let's Encrypt Base de datos Neon PostgreSQL (Free) Proyecto nvito-dev, 0.5 GB, auto-suspend 5 min Cache/Colas Upstash Redis (Free) 256 MB, 500K cmds/mes, TLS, compartido con TEST Storage Cloudflare R2 (Free) 4 buckets con prefijo dev-nvito-* Email Mailtrap (Free) 100 emails/mes, inbox visual Auth Clerk (Dev mode) Instancia compartida con TEST
Servicio Branch Subdominio Puerto interno nvito-api-dev developdev-api.nvito.mx3000 nvito-admin-dev developdev-admin.nvito.mx5050 nvito-invitations-dev developdev-inv.nvito.mx3001 nvito-pwa-dev developdev-app.nvito.mx3002
Limitacion Impacto Workaround Neon auto-suspend BD duerme tras 5 min inactiva; primer query tarda 3-5s Cold start esperado, no afecta desarrollo Upstash compartido DEV y TEST usan la misma DB Redis Datos efimeros (cache + queues), sin colision en la practica Mailtrap 100/mes Limite de 100 emails en free tier Suficiente para desarrollo; emails se ven en inbox visual VPS compartido DEV y TEST comparten el mismo VPS 8 GB RAM bastan para 8 contenedores ligeros
El ambiente TEST refleja la rama test y se usa para QA formal antes de produccion. Su estructura es identica a DEV con la unica diferencia del prefijo de subdominios y la base de datos.
Aspecto DEV TEST Branch developtestSubdominios dev-*.nvito.mxtest-*.nvito.mxBase de datos Neon Proyecto nvito-dev Proyecto nvito-test Buckets R2 dev-nvito-*test-nvito-*Proposito Integracion rapida QA formal, regresion Quien lo usa Desarrolladores QA + stakeholders
Servicio Branch Subdominio nvito-api-test testtest-api.nvito.mxnvito-admin-test testtest-admin.nvito.mxnvito-invitations-test testtest-inv.nvito.mxnvito-pwa-test testtest-app.nvito.mx
TEST como staging
El ambiente TEST funciona como staging. Todo cambio que llega aqui ya paso por DEV y los tests automatizados. Las demos a stakeholders y las validaciones finales se hacen en TEST antes de promover a produccion.
El ambiente de produccion esta planeado para correr en Railway Pro , aprovechando su private networking, auto-deploy, y escalado vertical sin overhead de gestion de servidores.
Servicio Custom Domain Tipo Estimacion de recursos nvito-api api.nvito.mx (via Worker)Web Service 512 MB RAM, 1 vCPU nvito-admin admin.nvito.mxWeb Service 256 MB RAM, 0.5 vCPU nvito-invitations inv.nvito.mxWeb Service 256 MB RAM, 0.5 vCPU nvito-pwa app.nvito.mxWeb Service 256 MB RAM, 0.5 vCPU PostgreSQL — (private network) Database 1 GB RAM, 10 GB storage
Railway Pro ofrece una red privada interna entre servicios del mismo proyecto. Esto significa que:
nvito-admin, nvito-invitations y nvito-pwa se comunican con nvito-api via http://nvito-api.railway.internal:3000 (sin SSL overhead, sin internet)
PostgreSQL es accesible solo desde la red privada, no tiene IP publica
La latencia interna es de menos de 1ms
Aspecto DEV/TEST PROD Hosting VPS + Coolify (self-managed) Railway Pro (managed) Base de datos Neon Free (auto-suspend) Railway PostgreSQL (always-on) Email Mailtrap (testing) Resend (produccion) API Proxy Directo (A record a VPS) Cloudflare Worker (oculta origin) Auth keys Clerk pk_test_ / sk_test_ Clerk pk_live_ / sk_live_ R2 Buckets {env}-nvito-*nvito-* (sin prefijo)CF Access Solo admin admin + docs SSL origin Let's Encrypt (Coolify) Railway auto-SSL
Servicio Local DEV TEST PROD Base de datos PostgreSQL 15 (Docker) Neon Free (nvito-dev) Neon Free (nvito-test) Railway PostgreSQL Cache / Colas Redis 7 (Docker) Upstash Free (compartido) Upstash Free (compartido) Upstash Pro o Free Storage (S3) MinIO (Docker) R2 Free (dev-nvito-*) R2 Free (test-nvito-*) R2 Free (nvito-*) Email MailDev (Docker) Mailtrap Free Mailtrap Free Resend ($20/mes o Free) Auth Clerk Dev (cloud) Clerk Dev (cloud) Clerk Dev (cloud) Clerk Prod (cloud) Hosting apps Procesos locales Coolify + VPS Coolify + VPS Railway Pro CDN MinIO directo R2 public URL R2 public URL cdn.nvito.mx (R2 custom domain)Deploy Manual Auto (Coolify webhook) Auto (Coolify webhook) Auto (Railway git deploy) SSL — (HTTP) Let's Encrypt (Traefik) Let's Encrypt (Traefik) Railway auto-SSL Dominio localhost:*dev-*.nvito.mxtest-*.nvito.mx*.nvito.mx
Variable Local DEV TEST PROD NODE_ENVdevelopmentproductionproductionproductionDATABASE_URLpostgresql://nvito:...@localhost:5432/nvito_devNeon pooled URL Neon pooled URL Railway private URL REDIS_URLredis://localhost:6379rediss://...@upstash.io:6379misma Upstash DB Upstash TLS URL CORS_ORIGINShttp://localhost:5050,...https://dev-admin.nvito.mx,...https://test-admin.nvito.mx,...https://admin.nvito.mx,...FRONTEND_URLhttp://localhost:3001https://dev-inv.nvito.mxhttps://test-inv.nvito.mxhttps://inv.nvito.mxCDN_URLhttp://localhost:9000/nvito-uploadsR2 public URL (dev) R2 public URL (test) https://cdn.nvito.mx
Variable Local DEV/TEST PROD CLERK_SECRET_KEYsk_test_...sk_test_...sk_live_...CLERK_PUBLISHABLE_KEYpk_test_...pk_test_...pk_live_...NEXT_PUBLIC_CLERK_PUBLISHABLE_KEYpk_test_...pk_test_...pk_live_...
Variable Local DEV/TEST PROD R2_ENDPOINThttp://localhost:9000— (usa R2_ACCOUNT_ID) — R2_ACCOUNT_ID— Cloudflare Account ID Cloudflare Account ID R2_ACCESS_KEY_IDminioadminR2 API Token R2 API Token R2_SECRET_ACCESS_KEYminioadmin123R2 API Secret R2 API Secret R2_BUCKET_UPLOADSnvito-uploadsdev-nvito-uploadsnvito-uploadsR2_BUCKET_ASSETSnvito-assetsdev-nvito-assetsnvito-assetsR2_BUCKET_PRIVATEnvito-privatedev-nvito-privatenvito-privateR2_BUCKET_TEMPLATESnvito-templatesdev-nvito-templatesnvito-templates
Variable Local DEV/TEST PROD SMTP_HOSTlocalhostsandbox.smtp.mailtrap.iosmtp.resend.comSMTP_PORT10252525465SMTP_USER— (vacio) Credenciales Mailtrap resendSMTP_PASSWORD— (vacio) Credenciales Mailtrap Resend API Key SMTP_FROMnvito@localhosttest@nvito.mxnoreply@nvito.mx
La configuracion de storage (storage.config.ts en nvito-api) se adapta automaticamente al ambiente:
Ambiente Almacenamiento Herramienta Local Archivo .env (gitignored) Opcionalmente bws CLI DEV/TEST Dashboard Coolify (por servicio) Secretos criticos en Bitwarden SM CI/CD GitLab Variables (BWS_ACCESS_TOKEN) bws run inyecta en runtimePROD Dashboard Railway (por servicio) Bitwarden SM para rotacion
Nunca commitear secretos
Los archivos .env estan en .gitignore. Las variables NEXT_PUBLIC_* son publicas por definicion (se embeben en el JS del browser). Todo lo demas es secreto y debe gestionarse via dashboard del proveedor o Bitwarden Secrets Manager.