Configuración de Docker Compose para Caddy 2 Reverse Proxy + Static Web Server
Cuándo usar esta combinación
Esta arquitectura es ideal para desplegar aplicaciones JAMstack, Sitios de Página Única (SPA como React o Vue) y documentación técnica que requieren alto rendimiento con mínima sobrecarga operativa. Caddy 2 simplifica drásticamente la infraestructura al automatizar la gestión y renovación de certificados TLS (Let’s Encrypt/ZeroSSL) y soportar HTTP/3 de forma nativa, eliminando la necesidad de agentes externos como Certbot. Es la solución óptima cuando se busca reemplazar pilas complejas de Nginx/Certbot por un binario moderno y ligero enfocado en servir archivos estáticos con compresión automática (Gzip/Zstd).
Variables de entorno críticas para producción
DOMAIN_NAME(ej.app.empresa.com): Define el FQDN para la emisión del certificado TLS y el enrutamiento SNI. Si se mantiene enlocalhosto IP, no se emitirán certificados válidos.ACME_EMAIL(ej.[email protected]): Correo requerido por las autoridades de certificación (Let’s Encrypt) para notificaciones de caducidad, problemas de validación y términos de servicio.ACME_CA_URL(o switch de entornoLETSENCRYPT_STAGING=false): Debe apuntar a los endpoints de producción de la CA. Durante pruebas locales debe usar staging para evitar bloqueos por límite de peticiones (rate limits).
Consejo de seguridad y rendimiento
- Persistencia de certificados y principio de menor privilegio:
Monta obligatoriamente un volumen nombrado dedicado para la ruta/datade Caddy (donde se almacenan las llaves privadas y certificados TLS). Si el contenedor se destruye sin persistir/data, solicitará certificados nuevos en cada reinicio, alcanzando rápidamente los rate limits de Let’s Encrypt y dejando el sitio fuera de servicio.
Adicionalmente, monta el directorio que contiene los archivos estáticos en modo solo lectura (:ro) y ejecuta el contenedor bajo un usuario no-root (security_opt: [no-new-privileges:true]) para mitigar ejecuciones arbitrarias o modificaciones maliciosas de los activos web.
Checklist de Seguridad antes de desplegar
- Cambiar las contraseñas por defecto en el archivo .env
- Mapear volúmenes persistentes en el VPS
- Configurar las reglas de firewall para los puertos requeridos