main content

Como configurar entornos de staging, despliegue continuo y flujos DevOps para tu proyecto Drupal

El 68% de los equipos de desarrollo que adoptan practicas DevOps reportan una mejora significativa en la frecuencia de despliegues y una reduccion del 60% en fallos en produccion, segun el informe DORA State of DevOps 2024. Sin embargo, en el ecosistema Drupal, muchas organizaciones siguen desplegando cambios directamente en produccion, sin entornos intermedios ni automatizacion, asumiendo riesgos innecesarios que pueden traducirse en caidas de servicio, perdida de datos o regresiones funcionales.

Este articulo detalla como disenar una infraestructura profesional de staging y despliegue continuo para proyectos Drupal, cubriendo desde la configuracion de entornos hasta la implementacion de pipelines CI/CD completos. Esta dirigido a CTOs, responsables de infraestructura y equipos de desarrollo que buscan industrializar sus procesos de entrega de software sobre Drupal.

Por que tu proyecto Drupal necesita un flujo DevOps

El coste de no tener entornos de staging

Desplegar cambios directamente en produccion sin validacion previa genera problemas recurrentes:

  • Regresiones funcionales: un cambio en un modulo puede romper funcionalidad en otra parte del sitio sin que nadie lo detecte hasta que un usuario lo reporta.
  • Conflictos de configuracion: Drupal almacena configuracion en base de datos. Sin un flujo controlado de exportacion e importacion, los cambios se pierden o se sobreescriben.
  • Tiempo de inactividad no planificado: segun Gartner, el coste medio del downtime para una empresa mediana es de 5.600 euros por minuto.
  • Imposibilidad de rollback: sin versionado y sin entornos separados, revertir un despliegue fallido puede llevar horas.

Beneficios medibles de un flujo DevOps en Drupal

Las organizaciones que implementan un pipeline de despliegue continuo para Drupal obtienen:

  • Reduccion del 75% en el tiempo de despliegue (de horas a minutos)
  • Deteccion temprana del 90% de errores antes de llegar a produccion
  • Capacidad de realizar multiples despliegues diarios con confianza
  • Trazabilidad completa de cada cambio desplegado

Arquitectura de entornos: desarrollo, staging y produccion

El modelo de tres entornos

La arquitectura minima recomendada para un proyecto Drupal profesional incluye tres entornos:

1. Desarrollo (local)

Cada desarrollador trabaja en su maquina local con una copia del proyecto. Las herramientas recomendadas para entornos locales de Drupal son:

  • DDEV: contenedores Docker preconfigurados para Drupal, con soporte para Xdebug, Mailhog y multiples versiones de PHP. Tiempo de configuracion: menos de 5 minutos.
  • Lando: alternativa basada en Docker con archivo de configuracion .lando.yml que define servicios, tooling y proxies.

2. Staging (preproduccion)

Replica exacta de produccion donde se validan los cambios antes del despliegue final. Debe cumplir estas condiciones:

  • Misma version de PHP, base de datos y servidor web que produccion
  • Datos anonimizados procedentes de produccion (cumplimiento RGPD)
  • Acceso restringido mediante autenticacion HTTP o VPN
  • URL propia (ejemplo: staging.miproyecto.es)
  • Certificado SSL valido

3. Produccion

El entorno publico accesible por los usuarios finales. Debe estar protegido con:

  • Despliegues automatizados (nunca manuales)
  • Monitorizacion activa de rendimiento y errores
  • Backups automaticos con verificacion de integridad
  • Plan de disaster recovery documentado y probado

Sincronizacion de datos entre entornos

Uno de los retos mas frecuentes en Drupal es mantener la coherencia entre entornos. La estrategia recomendada es:

  • Codigo y configuracion: siempre fluyen de desarrollo hacia produccion (dev > staging > produccion)
  • Contenido y base de datos: fluyen de produccion hacia desarrollo (produccion > staging > dev), anonimizando datos personales
  • Archivos subidos: sincronizacion mediante rsync o almacenamiento en servicios como S3

Gestion de configuracion en Drupal

El sistema Configuration Management de Drupal

Desde Drupal 8, el sistema de gestion de configuracion permite exportar toda la configuracion del sitio (tipos de contenido, vistas, permisos, configuracion de modulos) a archivos YAML almacenados en el repositorio Git. Esto es fundamental para un flujo DevOps porque:

  • La configuracion se versiona junto con el codigo
  • Los cambios de configuracion se revisan en pull requests como cualquier otro cambio
  • La importacion de configuracion en staging y produccion es determinista y reproducible

Flujo de trabajo con config split

El modulo config_split permite gestionar configuracion especifica por entorno. Casos de uso habituales:

  • Modulos solo para desarrollo: devel, kint, webprofiler activos en local pero desactivados en produccion
  • Configuracion de servicios: credenciales de APIs diferentes por entorno
  • Modulos de rendimiento: purge, varnish_purger activos solo en produccion

La configuracion de config_split se estructura en el directorio config/ del proyecto:

config/
  sync/          # Configuracion compartida por todos los entornos
  splits/
    dev/         # Configuracion exclusiva de desarrollo
    staging/     # Configuracion exclusiva de staging
    prod/        # Configuracion exclusiva de produccion

Exportacion e importacion de configuracion

Los comandos basicos con Drush (la herramienta de linea de comandos de Drupal) son:

# Exportar configuracion actual a archivos YAML
drush config:export

# Importar configuracion desde archivos YAML
drush config:import

# Ver diferencias entre configuracion activa y exportada
drush config:status

Es critico que la importacion de configuracion forme parte del pipeline de despliegue automatizado, ejecutandose despues de la actualizacion de codigo y antes del borrado de cache.

Implementacion del pipeline CI/CD

Estructura del pipeline

Un pipeline de integracion y despliegue continuo para Drupal consta de las siguientes etapas:

Etapa 1: Validacion de codigo (CI)

  • Analisis estatico con PHPStan (nivel 6 o superior)
  • Comprobacion de estandares de codificacion con PHPCS y las reglas de Drupal
  • Ejecucion de tests unitarios con PHPUnit
  • Ejecucion de tests funcionales con Drupal Test Framework
  • Analisis de seguridad de dependencias con composer audit

Etapa 2: Build

  • Instalacion de dependencias con composer install --no-dev
  • Compilacion de assets frontend (CSS, JS) con herramientas como Webpack o Vite
  • Generacion de artefacto de despliegue (tarball o imagen Docker)

Etapa 3: Despliegue en staging

  • Transferencia del artefacto al servidor de staging
  • Activacion del modo de mantenimiento
  • Actualizacion de base de datos: drush updatedb
  • Importacion de configuracion: drush config:import
  • Borrado de cache: drush cache:rebuild
  • Desactivacion del modo de mantenimiento
  • Ejecucion de tests de humo (smoke tests)

Etapa 4: Aprobacion manual

Punto de control donde el equipo de QA o el product owner valida los cambios en staging antes de aprobar el despliegue a produccion.

Etapa 5: Despliegue en produccion

Mismos pasos que staging, con la adicion de:

  • Notificacion al equipo via Slack o Teams
  • Etiquetado automatico de la release en Git
  • Verificacion post-despliegue automatizada

Ejemplo de pipeline con GitLab CI

A continuacion se muestra un ejemplo funcional de .gitlab-ci.yml para un proyecto Drupal:

stages:
  - validate
  - build
  - deploy_staging
  - deploy_production

validate:
  stage: validate
  image: drupal-ci:php8.2
  script:
    - composer install
    - vendor/bin/phpstan analyse --level=6
    - vendor/bin/phpcs --standard=Drupal,DrupalPractice
    - vendor/bin/phpunit
  rules:
    - if: $CI_MERGE_REQUEST_ID

build:
  stage: build
  script:
    - composer install --no-dev --optimize-autoloader
    - npm ci && npm run build
  artifacts:
    paths:
      - vendor/
      - web/themes/custom/*/dist/

deploy_staging:
  stage: deploy_staging
  script:
    - ssh staging "cd /var/www/drupal && git pull origin main"
    - ssh staging "cd /var/www/drupal && composer install --no-dev"
    - ssh staging "cd /var/www/drupal && drush deploy"
  environment:
    name: staging
    url: https://staging.miproyecto.es
  rules:
    - if: $CI_COMMIT_BRANCH == "main"

deploy_production:
  stage: deploy_production
  script:
    - ssh production "cd /var/www/drupal && git pull origin main"
    - ssh production "cd /var/www/drupal && composer install --no-dev"
    - ssh production "cd /var/www/drupal && drush deploy"
  environment:
    name: production
    url: https://www.miproyecto.es
  when: manual
  rules:
    - if: $CI_COMMIT_BRANCH == "main"

Alternativas: GitHub Actions y Jenkins

El mismo flujo puede implementarse en GitHub Actions o Jenkins con logica identica y diferente sintaxis. Para equipos que prefieren plataformas gestionadas, Platform.sh y Acquia Cloud ofrecen pipelines CI/CD integrados con soporte nativo para Drupal, incluyendo entornos efimeros por rama.

Estrategias de despliegue avanzadas

Despliegue con zero downtime

El despliegue clasico con modo de mantenimiento implica unos segundos de inactividad. Para sitios con alta disponibilidad, existen alternativas:

  • Blue-Green deployment: dos entornos de produccion identicos. El trafico se redirige al nuevo entorno una vez validado, y el anterior queda como rollback inmediato.
  • Rolling deployment: en arquitecturas con multiples servidores, los nodos se actualizan uno a uno mientras los demas siguen sirviendo trafico.
  • Canary deployment: el nuevo codigo se despliega a un porcentaje pequeno de usuarios (por ejemplo, el 5%) para detectar problemas antes del despliegue completo.

Despliegue basado en artefactos vs. Git pull

El metodo git pull en el servidor es sencillo pero tiene limitaciones: descarga todo el historial de Git y ejecuta composer install en produccion. La alternativa recomendada para proyectos de escala es el despliegue basado en artefactos:

  1. El pipeline genera un tarball con todo el codigo listo para ejecutar (sin .git, sin dependencias de desarrollo)
  2. El artefacto se sube a un almacen (S3, GitLab Package Registry)
  3. El servidor de produccion descarga y descomprime el artefacto en un directorio nuevo
  4. Un enlace simbolico (current) se actualiza para apuntar al nuevo directorio
  5. Rollback instantaneo: basta con cambiar el enlace simbolico al directorio anterior

Herramientas como Deployer (deployer.org) automatizan este flujo con soporte nativo para Drupal:

dep deploy production

Monitorizacion y observabilidad

Un flujo DevOps no esta completo sin monitorizacion. Las herramientas recomendadas para proyectos Drupal son:

  • New Relic o Datadog: monitorizacion de rendimiento de aplicacion (APM) con trazas de cada peticion PHP, consultas SQL lentas y uso de memoria.
  • Sentry: captura de errores y excepciones en tiempo real, con contexto de usuario y traza de ejecucion.
  • Uptime Robot o Pingdom: monitorizacion de disponibilidad con alertas por email, SMS o Slack.
  • Grafana + Prometheus: dashboards personalizados con metricas de sistema (CPU, memoria, disco) y de aplicacion (tiempo de respuesta, peticiones por segundo).

Metricas clave a monitorizar

  • Tiempo de respuesta P95: el percentil 95 no debe superar los 500 ms
  • Tasa de errores 5xx: debe mantenerse por debajo del 0,1%
  • Tiempo de despliegue: desde el commit hasta produccion, objetivo inferior a 15 minutos
  • Frecuencia de despliegue: equipos maduros despliegan varias veces al dia
  • MTTR (Mean Time to Recovery): tiempo medio de recuperacion ante incidentes, objetivo inferior a 30 minutos

Seguridad en el pipeline

La seguridad debe integrarse en el pipeline desde el inicio (enfoque DevSecOps):

  • Escaneo de dependencias: composer audit detecta vulnerabilidades conocidas en paquetes de terceros
  • Analisis SAST: herramientas como PHPStan con reglas de seguridad detectan patrones peligrosos en el codigo
  • Secretos fuera del repositorio: utilizar variables de entorno o gestores de secretos (Vault, AWS Secrets Manager) para credenciales de base de datos, claves API y tokens
  • Principio de minimo privilegio: las claves de despliegue solo deben tener permisos de escritura en los directorios necesarios
  • Registro de auditorias: registrar quien despliega que y cuando, con enlace al commit y al ticket correspondiente

Buenas practicas y errores comunes

  • Mantener config/sync limpio y usar drush deploy como comando unico de despliegue
  • Automatizar la anonimizacion de datos al sincronizar produccion con staging
  • Documentar el runbook de despliegue y el plan de rollback
  • Nunca editar configuracion directamente en produccion sin exportarla al repositorio
  • Incluir siempre composer.lock en el repositorio y usar composer install (no update) en produccion

Conclusiones y siguiente paso

Implementar un flujo DevOps completo para Drupal requiere inversion inicial en infraestructura y procesos, pero el retorno es inmediato: despliegues mas rapidos, menos errores en produccion y capacidad real de iterar sin miedo a romper cosas.

Las piezas clave son: entornos separados, configuracion versionada, pipeline CI/CD automatizado y monitorizacion continua.

Si necesitas ayuda para disenar e implementar un flujo DevOps adaptado a tu proyecto Drupal, contacta con nuestro equipo de consultoria especializada. Evaluamos tu infraestructura actual, identificamos los puntos de mejora prioritarios y te acompanamos en la implementacion paso a paso.