· Tutoriales · 8 min read
Configurar Servidor Web Caddy con Docker

Caddy es un servidor web escrito en Go que está diseñado para ser fácil de usar y configurar. Tiene una serie de características que lo convierten en una opción atractiva para aquellos que buscan alojar sus propios sitios web, incluido HTTPS automático, alojamiento virtual y una sintaxis de configuración simple.
Una de las formas más fáciles de usar Caddy es con Docker. Docker es una plataforma de contenedorización que facilita la ejecución y gestión de aplicaciones en un entorno consistente. Esto te permite ejecutar Caddy en cualquier sistema que admita Docker, sin preocuparte por las dependencias o configuraciones específicas del sistema.
Para comenzar, necesitarás tener Docker instalado en tu sistema. Una vez que tengas Docker instalado, puedes ejecutar el siguiente comando para obtener la última versión de la imagen de Docker de Caddy desde Docker Hub:
docker pull caddy
A continuación, puedes crear un nuevo contenedor de Docker usando la imagen de Caddy. Esto se puede hacer con el comando docker run, así:
docker run -d -p 80:80 -p 443:443 caddy
Este comando creará un nuevo contenedor de Docker usando la imagen de Caddy y lo iniciará en segundo plano. La bandera -p se usa para mapear el puerto 80 y 443 del contenedor a la máquina host, para que puedas acceder al servidor Caddy desde un navegador web.
Una vez que el contenedor esté en ejecución, puedes acceder al servidor web de Caddy apuntando tu navegador web a http://localhost o https://localhost. Deberías ver la página de bienvenida predeterminada de Caddy, que indica que tu servidor está en funcionamiento.
Ahora que tienes Caddy ejecutándose en un contenedor de Docker, puedes configurarlo para servir tu propio sitio web. Para hacer esto, necesitarás crear un Caddyfile, que es un archivo de configuración que especifica las reglas de cómo Caddy debe servir tu sitio web.
Aquí hay un ejemplo de Caddyfile que puedes usar para servir un sitio web estático simple:
localhost
root /var/www/html
file_server
Este Caddyfile le dice a Caddy que sirva archivos desde el directorio /var/www/html en la máquina local, y que use la directiva file_server para manejar las solicitudes.
Para usar este Caddyfile, necesitarás montar el directorio /var/www/html como un volumen en tu contenedor de Docker. Puedes hacer esto agregando la bandera -v al comando docker run, así:
docker run -d -p 80:80 -p 443:443 -v /var/www/html:/var/www/html caddy
Esto montará el directorio /var/www/html de la máquina host como un volumen en el contenedor de Docker, para que Caddy pueda acceder y servir los archivos en ese directorio.
También puedes pasar el Caddyfile al contenedor de Docker usando la bandera -v para montarlo como un volumen, así:
docker run -d -p 80:80 -p 443:443 -v /var/www/html:/var/www/html -v /path/to/Caddyfile:/etc/caddy/Caddyfile caddy
Esto montará el Caddyfile de la máquina host en /path/to/Caddyfile como un volumen en el contenedor de Docker, para que Caddy pueda usarlo para configurar cómo sirve tu sitio web.
Con estos pasos, ahora deberías tener Caddy ejecutándose en un contenedor de Docker y sirviendo tu propio sitio web. Puedes usar el Caddyfile para configurar cómo Caddy sirve tu sitio web, y usar la bandera -v de Docker para montar volúmenes y pasar archivos de configuración y ajustes adicionales. Al usar Docker para ejecutar Caddy, puedes gestionar y escalar fácilmente tu servidor web, y desplegarlo en cualquier sistema que admita Docker.
Sí, Caddy facilita la gestión de múltiples hosts virtuales en un solo servidor. Un host virtual es una forma de alojar múltiples sitios web en un solo servidor, cada uno con su propio nombre de dominio y contenido web.
Para configurar el alojamiento virtual con Caddy, necesitarás agregar directivas de host adicionales a tu Caddyfile. Aquí hay un ejemplo de Caddyfile que muestra cómo configurar el alojamiento virtual para dos sitios web, example.com y example.org:
example.com
root /var/www/example.com
file_server
example.org
root /var/www/example.org
file_server
En este ejemplo, la directiva de host example.com especifica que Caddy debe servir archivos desde el directorio /var/www/example.com para solicitudes a example.com. La directiva de host example.org hace lo mismo para solicitudes a example.org.
También necesitarás asegurarte de que los nombres de dominio example.com y example.org apunten a la dirección IP de tu servidor Caddy. Esto se puede hacer actualizando los registros DNS de tus dominios para que apunten a la dirección IP de tu servidor Caddy.
Con estos pasos, Caddy podrá servir diferentes sitios web para solicitudes a diferentes nombres de dominio. Puedes agregar tantas directivas de host como necesites para admitir múltiples hosts virtuales en tu servidor Caddy.
Caddy también tiene soporte para proxy inverso, que es una forma de enrutar solicitudes entrantes a diferentes servidores backend según la URL de la solicitud. Esto puede ser útil en varios escenarios diferentes, como el balanceo de carga, servir múltiples aplicaciones desde un solo dominio o proporcionar una capa adicional de seguridad para tus servidores backend.
Para configurar Caddy para actuar como un proxy inverso, necesitarás usar la directiva reverse_proxy en tu Caddyfile. Aquí hay un ejemplo de Caddyfile que muestra cómo configurar Caddy como un proxy inverso para dos servidores backend:
localhost
reverse_proxy /api1 http://backend1:8080
reverse_proxy /api2 http://backend2:8080
En este ejemplo, las directivas reverse_proxy especifican que las solicitudes a http://localhost/api1 deben ser proxy a http://backend1:8080, y las solicitudes a http://localhost/api2 deben ser proxy a http://backend2:8080.
También puedes configurar Caddy para hacer proxy de websockets y manejar la terminación HTTPS agregando banderas adicionales a la directiva reverse_proxy. Por ejemplo:
localhost
reverse_proxy /api1 http://backend1:8080 {
websocket
transparent
}
En este ejemplo, la bandera websocket le dice a Caddy que haga proxy de conexiones websocket, y la bandera transparent habilita la terminación HTTPS, para que el servidor backend pueda comunicarse con Caddy a través de una conexión segura.
Usar un proxy inverso puede proporcionar una serie de beneficios, incluido un rendimiento mejorado, seguridad y escalabilidad para tus aplicaciones web. También puede facilitar la gestión y el despliegue de tus aplicaciones, al proporcionar un único punto de entrada para las solicitudes entrantes.
Sí, Caddy tiene soporte integrado para compresión HTTP, que puede reducir el tamaño del payload de respuesta y mejorar el rendimiento de tu sitio web. La compresión HTTP es una técnica que utiliza algoritmos para comprimir los datos de respuesta antes de enviarlos al cliente, y el cliente descomprime los datos antes de renderizarlos en el navegador web.
Para habilitar la compresión HTTP en Caddy, necesitarás agregar la directiva compress a tu Caddyfile. Aquí hay un ejemplo de Caddyfile que muestra cómo habilitar la compresión para un sitio web estático simple:
localhost
root /var/www/html
file_server
encode zstd gzip
En este ejemplo, la directiva encode se agrega al final del Caddyfile, lo que le dice a Caddy que comprima el payload de respuesta para todas las solicitudes usando zstd o gzip.
Habilitar la compresión HTTP puede mejorar significativamente el rendimiento de tu sitio web, especialmente para páginas grandes o complejas. También puede reducir la cantidad de datos que se transfieren entre el servidor y el cliente, lo que puede ahorrar ancho de banda y reducir los costos de alojamiento.
Otra forma de usar Caddy con Docker es usando Docker Compose, que es una herramienta para definir y ejecutar aplicaciones Docker de múltiples contenedores. Esto puede facilitar la gestión y el despliegue de múltiples contenedores al mismo tiempo, y configurar el entorno y las dependencias para tu servidor Caddy.
Para usar Caddy con Docker Compose, primero necesitarás crear un archivo docker-compose.yml que defina los contenedores, redes y volúmenes de tu aplicación. Aquí hay un ejemplo de archivo docker-compose.yml que muestra cómo configurar Caddy con Docker Compose:
version: '3'
services:
caddy:
image: caddy
expose:
- 9000
ports:
- '127.0.0.1:9000:9000'
networks:
- caddy_network
environment:
- sonar.jdbc.url=jdbc:postgresql://db:5432/sonar
- sonar.jdbc.username=sonar
- sonar.jdbc.password=sonar
volumes:
- sonarqube_conf:/opt/sonarqube/conf
- sonarqube_data:/opt/sonarqube/data
- sonarqube_extensions:/opt/sonarqube/extensions
- sonarqube_bundled-plugins:/opt/sonarqube/lib/bundled-plugins
db:
image: postgres
networks:
- caddy_network
environment:
- POSTGRES_USER=sonar
- POSTGRES_PASSWORD=sonar
volumes:
- postgresql:/var/lib/postgresql
- postgresql_data:/var/lib/postgresql/data
networks:
caddy_network:
driver: host
volumes:
caddy_conf:
caddy_data:
caddy_extensions:
caddy_bundled-plugins:
postgresql:
postgresql_data:
Este archivo docker-compose.yml define un servicio caddy que usa la imagen de Docker caddy y expone el puerto 80 y 443. También monta el Caddyfile y el directorio www de la máquina host como volúmenes en el contenedor, y conecta el contenedor a una red caddy_network.
Para usar este archivo docker-compose.yml, necesitarás tener Docker Compose instalado en tu sistema. Una vez que tengas Docker Compose instalado, puedes usar el comando docker-compose up para iniciar el servicio caddy, así:
docker-compose up
Este comando iniciará el servicio caddy y cualquier dependencia, como la red caddy_network. Una vez que los contenedores estén en ejecución, puedes acceder al servidor Caddy apuntando tu navegador web a http://localhost.
Usar Docker Compose puede facilitar la gestión y el despliegue de tu servidor Caddy, y definir y ejecutar múltiples contenedores al mismo tiempo. También puede proporcionar un entorno consistente y predecible para tus aplicaciones web, y facilitar la configuración y escalado de tu servidor Caddy.