Entornos de Despliegue

Gestión de entornos de desarrollo, staging y producción — paridad entre entornos, configuración específica y buenas prácticas.

¿Qué es un entorno de despliegue?

Un entorno de despliegue es una instancia completa del sistema configurada para un propósito específico. Cada entorno tiene su propia infraestructura, bases de datos, servicios externos y configuración, pero idealmente ejecuta el mismo código.

Los entornos típicos en un proyecto de software son:

  • Desarrollo (dev): donde los desarrolladores trabajan día a día
  • Staging: réplica lo más fiel posible de producción para pruebas finales
  • Producción (prod): el entorno real que usan los usuarios finales

Entorno de desarrollo

El entorno de desarrollo es donde el equipo escribe, prueba y depura código. Sus características principales son:

  • Velocidad de iteración: los cambios se reflejan rápidamente
  • Datos de prueba: se usan datos ficticios o seeds para simular escenarios
  • Servicios locales o mock: bases de datos locales, colas en memoria, APIs simuladas
  • Logs verbosos: nivel de logging en DEBUG para facilitar la depuración

Es común usar herramientas como Docker Compose para levantar todo el stack localmente con un solo comando.

Entorno de staging

Staging es el último paso antes de producción. Su objetivo es validar que todo funciona en condiciones lo más cercanas posible al entorno real.

  • Paridad con producción: misma infraestructura, mismas versiones de servicios, misma configuración de red
  • Datos representativos: datos anonimizados o generados que reflejen volúmenes y patrones reales
  • Pruebas de integración: validar que todos los servicios se comunican correctamente
  • Pruebas de rendimiento: ejecutar load tests para detectar cuellos de botella

Entorno de producción

Producción es el entorno que sirve a los usuarios finales. Requiere el mayor nivel de cuidado:

  • Alta disponibilidad: redundancia, balanceo de carga, failover automático
  • Monitoreo continuo: métricas, alertas, dashboards en tiempo real
  • Logs estructurados: formato JSON, correlación de requests, retención adecuada
  • Backups automáticos: respaldos regulares de bases de datos y configuración
  • Acceso restringido: solo personal autorizado puede acceder directamente

Paridad entre entornos

Uno de los principios más importantes del despliegue moderno es la paridad entre entornos (environment parity). La idea es minimizar las diferencias entre dev, staging y producción.

¿Por qué importa?

Cuando los entornos son muy diferentes, los bugs aparecen solo en producción — el peor lugar para descubrirlos. Las diferencias comunes que causan problemas son:

  • Versiones diferentes de bases de datos o servicios
  • Configuración de red distinta (puertos, DNS, certificados)
  • Volúmenes de datos muy diferentes
  • Sistemas operativos o runtimes distintos

Cómo lograr paridad

  • Contenedores: usar Docker para que el mismo artefacto se ejecute en todos los entornos
  • Infrastructure as Code: definir la infraestructura con Terraform, Pulumi o CloudFormation
  • Configuración externalizada: las diferencias entre entornos se manejan solo con variables de entorno
  • Pipelines consistentes: el mismo pipeline de CI/CD despliega en todos los entornos

Configuración por entorno

Cada entorno necesita configuración específica. La clave es separar la configuración del código:

# .env.development
DATABASE_URL=postgres://localhost:5432/myapp_dev
LOG_LEVEL=debug
API_URL=http://localhost:3000

# .env.staging
DATABASE_URL=postgres://staging-db:5432/myapp_staging
LOG_LEVEL=info
API_URL=https://staging-api.example.com

# .env.production
DATABASE_URL=postgres://prod-db:5432/myapp_prod
LOG_LEVEL=warn
API_URL=https://api.example.com

Buenas prácticas

  • Nunca hardcodear valores específicos de un entorno en el código
  • Usar variables de entorno para todo lo que cambie entre entornos
  • Mantener un archivo .env.example documentando todas las variables necesarias
  • Los secretos nunca van en archivos de configuración — usar un gestor de secretos

Estrategias de promoción

La promoción es el proceso de mover código de un entorno al siguiente:

  1. Dev → Staging: automático tras pasar tests en CI
  2. Staging → Producción: manual o automático según la madurez del equipo

El artefacto que se promueve debe ser exactamente el mismo — no se recompila entre entornos. Solo cambia la configuración.

Resumen

AspectoDevStagingProducción
DatosFicticios/seedsRepresentativosReales
AccesoAbierto al equipoRestringidoMuy restringido
MonitoreoBásicoCompletoCompleto + alertas
LogsDEBUGINFOWARN/ERROR
DespliegueContinuoAutomáticoControlado