Docs

Ambientes

Tabla de Contenidos

  1. Vision General
  2. Ambiente Local (Docker Compose)
  3. Ambiente DEV (VPS + Coolify)
  4. Ambiente TEST (VPS + Coolify)
  5. Ambiente PROD (Railway Pro)
  6. Tabla Comparativa de Ambientes
  7. Variables de Entorno por Ambiente

1. Vision General

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.

AmbienteBranchPropositoUsuariosHosting
LocalcualquieraDesarrollo individual, debugging, iteracion rapidaDesarrolladoresDocker Compose (maquina local)
DEVdevelopIntegracion continua, validacion de featuresDesarrolladoresVPS Contabo + Coolify
TESTtestQA formal, pruebas de regresion, demos a stakeholdersQA + stakeholdersVPS Contabo + Coolify
PRODmainProduccion real con usuarios finalesTodosRailway Pro + Cloudflare

2. Ambiente Local (Docker Compose)

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.

2.1 Arquitectura Local

2.2 Servicios Docker y Puertos

ServicioImagenPuerto(s)FuncionDatos persisten
postgrespostgres:15-alpine5432Base de datos principal (Prisma ORM)Si (volumen externo)
redisredis:7-alpine6379Cache, Bull queues, rate limitingSi (volumen externo, AOF)
miniominio/minio:latest9000 (API), 9001 (Console)Storage S3-compatible (reemplaza R2)Si (volumen externo)
minio-clientminio/mc:latestCrea 4 buckets automaticamente al iniciarN/A
maildevmaildev/maildev:latest1080 (Web UI), 1025 (SMTP)Servidor SMTP local (reemplaza Mailtrap)No (efimero)
admineradminer:latest8080UI web para gestion de PostgreSQLNo (efimero)

2.3 Aplicaciones Locales y Puertos

AplicacionPuertoComandoDescripcion
nvito-api3000npm run start:devBackend NestJS con hot reload
nvito-admin5050npm run devPanel admin Next.js
nvito-invitations3001npm run devServidor de invitaciones
nvito-pwa3002npm run devProgressive Web App
nvito-docs3333npm run devHub de documentacion

2.4 Setup Inicial

# 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

2.5 Credenciales Locales

ServicioUsuarioPasswordURL de acceso
PostgreSQLnvitonvito_dev_passwordpostgresql://nvito:nvito_dev_password@localhost:5432/nvito_dev
Redis— (sin auth)redis://localhost:6379
MinIOminioadminminioadmin123http://localhost:9001 (Console)
MailDevhttp://localhost:1080 (Web UI)
Adminernvitonvito_dev_passwordhttp://localhost:8080

2.6 Buckets de MinIO

El servicio minio-client crea automaticamente 4 buckets al iniciar:

BucketAcceso publicoContenido
nvito-uploadsSiFotos de galeria, avatares, logos
nvito-assetsSiAssets estaticos de invitaciones
nvito-privateNoContratos, documentos internos
nvito-templatesSiTemplates 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.

3. Ambiente DEV (VPS + Coolify)

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.

3.1 Infraestructura

ComponenteProveedorDetalle
HostingVPS Contabo (Cloud VPS 10)4 vCPU, 8 GB RAM, 150 GB SSD, Ubuntu 22.04
IP212.28.185.197Compartida con TEST
PaaSCoolify v4Gestion de contenedores Docker
Reverse ProxyTraefikIntegrado en Coolify, SSL Let's Encrypt
Base de datosNeon PostgreSQL (Free)Proyecto nvito-dev, 0.5 GB, auto-suspend 5 min
Cache/ColasUpstash Redis (Free)256 MB, 500K cmds/mes, TLS, compartido con TEST
StorageCloudflare R2 (Free)4 buckets con prefijo dev-nvito-*
EmailMailtrap (Free)100 emails/mes, inbox visual
AuthClerk (Dev mode)Instancia compartida con TEST

3.2 Subdominios y Servicios

ServicioBranchSubdominioPuerto interno
nvito-api-devdevelopdev-api.nvito.mx3000
nvito-admin-devdevelopdev-admin.nvito.mx5050
nvito-invitations-devdevelopdev-inv.nvito.mx3001
nvito-pwa-devdevelopdev-app.nvito.mx3002

3.3 Flujo de Deploy

3.4 Limitaciones del Ambiente DEV

LimitacionImpactoWorkaround
Neon auto-suspendBD duerme tras 5 min inactiva; primer query tarda 3-5sCold start esperado, no afecta desarrollo
Upstash compartidoDEV y TEST usan la misma DB RedisDatos efimeros (cache + queues), sin colision en la practica
Mailtrap 100/mesLimite de 100 emails en free tierSuficiente para desarrollo; emails se ven en inbox visual
VPS compartidoDEV y TEST comparten el mismo VPS8 GB RAM bastan para 8 contenedores ligeros

4. Ambiente TEST (VPS + Coolify)

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.

4.1 Diferencias con DEV

AspectoDEVTEST
Branchdeveloptest
Subdominiosdev-*.nvito.mxtest-*.nvito.mx
Base de datos NeonProyecto nvito-devProyecto nvito-test
Buckets R2dev-nvito-*test-nvito-*
PropositoIntegracion rapidaQA formal, regresion
Quien lo usaDesarrolladoresQA + stakeholders

4.2 Subdominios TEST

ServicioBranchSubdominio
nvito-api-testtesttest-api.nvito.mx
nvito-admin-testtesttest-admin.nvito.mx
nvito-invitations-testtesttest-inv.nvito.mx
nvito-pwa-testtesttest-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.

5. Ambiente PROD (Railway Pro)

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.

5.1 Arquitectura de Produccion

5.2 Servicios en Railway

ServicioCustom DomainTipoEstimacion de recursos
nvito-apiapi.nvito.mx (via Worker)Web Service512 MB RAM, 1 vCPU
nvito-adminadmin.nvito.mxWeb Service256 MB RAM, 0.5 vCPU
nvito-invitationsinv.nvito.mxWeb Service256 MB RAM, 0.5 vCPU
nvito-pwaapp.nvito.mxWeb Service256 MB RAM, 0.5 vCPU
PostgreSQL— (private network)Database1 GB RAM, 10 GB storage

5.3 Private Networking

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

5.4 Diferencias Clave con DEV/TEST

AspectoDEV/TESTPROD
HostingVPS + Coolify (self-managed)Railway Pro (managed)
Base de datosNeon Free (auto-suspend)Railway PostgreSQL (always-on)
EmailMailtrap (testing)Resend (produccion)
API ProxyDirecto (A record a VPS)Cloudflare Worker (oculta origin)
Auth keysClerk pk_test_ / sk_test_Clerk pk_live_ / sk_live_
R2 Buckets{env}-nvito-*nvito-* (sin prefijo)
CF AccessSolo adminadmin + docs
SSL originLet's Encrypt (Coolify)Railway auto-SSL

6. Tabla Comparativa de Ambientes

ServicioLocalDEVTESTPROD
Base de datosPostgreSQL 15 (Docker)Neon Free (nvito-dev)Neon Free (nvito-test)Railway PostgreSQL
Cache / ColasRedis 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-*)
EmailMailDev (Docker)Mailtrap FreeMailtrap FreeResend ($20/mes o Free)
AuthClerk Dev (cloud)Clerk Dev (cloud)Clerk Dev (cloud)Clerk Prod (cloud)
Hosting appsProcesos localesCoolify + VPSCoolify + VPSRailway Pro
CDNMinIO directoR2 public URLR2 public URLcdn.nvito.mx (R2 custom domain)
DeployManualAuto (Coolify webhook)Auto (Coolify webhook)Auto (Railway git deploy)
SSL— (HTTP)Let's Encrypt (Traefik)Let's Encrypt (Traefik)Railway auto-SSL
Dominiolocalhost:*dev-*.nvito.mxtest-*.nvito.mx*.nvito.mx

7. Variables de Entorno por Ambiente

7.1 Variables Criticas

VariableLocalDEVTESTPROD
NODE_ENVdevelopmentproductionproductionproduction
DATABASE_URLpostgresql://nvito:...@localhost:5432/nvito_devNeon pooled URLNeon pooled URLRailway private URL
REDIS_URLredis://localhost:6379rediss://...@upstash.io:6379misma Upstash DBUpstash 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.mx
CDN_URLhttp://localhost:9000/nvito-uploadsR2 public URL (dev)R2 public URL (test)https://cdn.nvito.mx

7.2 Variables de Autenticacion

VariableLocalDEV/TESTPROD
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_...

7.3 Variables de Storage

VariableLocalDEV/TESTPROD
R2_ENDPOINThttp://localhost:9000— (usa R2_ACCOUNT_ID)
R2_ACCOUNT_IDCloudflare Account IDCloudflare Account ID
R2_ACCESS_KEY_IDminioadminR2 API TokenR2 API Token
R2_SECRET_ACCESS_KEYminioadmin123R2 API SecretR2 API Secret
R2_BUCKET_UPLOADSnvito-uploadsdev-nvito-uploadsnvito-uploads
R2_BUCKET_ASSETSnvito-assetsdev-nvito-assetsnvito-assets
R2_BUCKET_PRIVATEnvito-privatedev-nvito-privatenvito-private
R2_BUCKET_TEMPLATESnvito-templatesdev-nvito-templatesnvito-templates

7.4 Variables de Email

VariableLocalDEV/TESTPROD
SMTP_HOSTlocalhostsandbox.smtp.mailtrap.iosmtp.resend.com
SMTP_PORT10252525465
SMTP_USER— (vacio)Credenciales Mailtrapresend
SMTP_PASSWORD— (vacio)Credenciales MailtrapResend API Key
SMTP_FROMnvito@localhosttest@nvito.mxnoreply@nvito.mx

7.5 Deteccion Automatica de Storage

La configuracion de storage (storage.config.ts en nvito-api) se adapta automaticamente al ambiente:

7.6 Gestion de Secretos

AmbienteAlmacenamientoHerramienta
LocalArchivo .env (gitignored)Opcionalmente bws CLI
DEV/TESTDashboard Coolify (por servicio)Secretos criticos en Bitwarden SM
CI/CDGitLab Variables (BWS_ACCESS_TOKEN)bws run inyecta en runtime
PRODDashboard 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.

Esta pagina fue util?