Despliegue de servicios Spring Boot
Spring Boot facilita empaquetar servicios, pero el éxito depende de una cadena de entrega reproducible, observabilidad y control de configuración. Esta guía describe el proceso completo que aplico en proyectos reales.
Empaquetado
- Docker multi-stage con
eclipse-temurin:21-jdk(build) +21-jre(runtime). Imagen final < 200 MB. - Generación de archivo
build-infoygit.properties(spring-boot-maven-plugin) para exponer versión en/actuator/info. - Inclusión de SBOM (
cyclonedx-maven-plugin) y firma de artefactos (maven-gpg-plugin). - Uso de
jlink/jreleasercuando se requiere footprint reducido.
Configuración y secretos
application.ymlcomo base,application-prod.ymlpara overrides.- Perfiles activos (
SPRING_PROFILES_ACTIVE) y variables de entorno para credenciales. - Integración con Spring Cloud Config / Vault / Secrets Manager según el cliente.
- Plantillas
env.sampley documentación de variables críticas para evitar errores en despliegues.
Pipeline (GitHub Actions / GitLab CI)
mvn verifycon análisis de SonarQube.- Construcción de imagen Docker y publicación en GHCR.
- Ejecución de pruebas contractuales / smoke tests contra entorno de staging.
- Publicación de artefacto Helm/manifest declarativo.
- Gate manual con checklist (migraciones OK, métricas estables).
Observabilidad
- Actuator con endpoints expuestos vía
/actuator/health,/actuator/metrics,/actuator/loggers. - Micrometer + Prometheus/Grafana para latencia, throughput y tasa de errores.
- Integración con OpenTelemetry (OTLP) para tracing distribuido (Tempo/Zipkin).
- Logback con formato JSON (
logstash-logback-encoder) y envío a ELK/Graylog. - Alertas Prometheus (ratio de error > 2 %, p95 > 500 ms) notificadas por Slack/Teams.
Estrategias de despliegue
- Blue/Green: dos entornos idénticos con switch de tráfico tras validar smoke tests.
- Canary: liberar 5–10 % del tráfico y monitorizar métricas antes de completar el rollout.
- Rolling update: Kubernetes despliega réplicas gradualmente (control de
maxUnavailableymaxSurge). - GitOps: manifiestos versionados en repositorio separado (ArgoCD/Flux).
- Feature toggles para activar funcionalidades bajo demanda.
Seguridad y cumplimiento
- Dependencias verificadas con
mvn dependency-checky Renovate. - Cabeceras de seguridad configuradas en Gateway (CSP, HSTS, X-Frame-Options).
- Logs estructurados (JSON) anonimizando datos sensibles para cumplir con GDPR.
- Hardening de imágenes Docker (user no root,
readOnlyRootFilesystem,seccomp). - Escaneo de vulnerabilidades en imágenes (Trivy, Grype).
- Revisión periódica de políticas IAM y rotación de secretos.
Estrategia de rollback
- Versionado semántico (
vX.Y.Z) y etiquetas Docker. - Mantenimiento de al menos dos despliegues previos listos para rollback.
- Scripts de base de datos reversibles; ejecución manual supervisada.
- Feature flags para deshabilitar rápidamente funcionalidades sin revertir código.
- Backups automáticos (snapshots Oracle/PostgreSQL) validados regularmente.
Checklist antes de producción
- Pruebas automatizadas en verde (unitarias, integración, contractuales).
- Revisión de seguridad (dependencias críticas, cabeceras, permisos).
- Smoke test posterior al despliegue.
- Métricas y logs verificados en las primeras 24 h.
- Health checks y endpoints Actuator protegidos/restringidos.
- Documentación de procedimientos de emergencia (rollback, escalado).
Con este flujo garantizo despliegues reproducibles, observables y alineados con los requisitos de entornos corporativos y cloud.