Skip to content

Caddy Server

Un servicio de servidor web, como Apache y Nginx, es la pieza fundamental para la operación de tus aplicaciones web. Con Caddy tienes una alternativa eficiente y mas sencilla que los comunmente usados.

Caddy está escrito en lenguaje Go y facilita el uso de certificados seguros. Su archivo de configuración es legible y sencillo. Aunque Nginx pueda ser el rey en rendimiento, si buscas una opción equilibrada con mejor experiencia de uso para tu aplicación web, Caddy es una buena opción.

También tiene característica de Proxy Inverso, función usada frecuentemente en aplicaciones web y contenedores. Si piensas en Kubernetes quizás existan otras opciones más enfocadas en ese contexto (Cloud Native), pero si se trata de un entorno de desarrollo también puedes combinar Caddy con contenedores.

Ejemplo esencial de Caddyfile

El archivo de configuración para Caddy se denomina Caddyfile. Para dar un ejemplo inicial, podríamos definir algo como lo siguiente:

groovy
localhost:9443 {
    root * /usr/share/caddy
    file_server
    tls internal
}

Se indica el dominio, luego en el bloque la ruta del sitio por defecto, con file_server se habilita el uso de archivos estáticos (Por ejemplo, un Blog o Sitio con un index.html), y tls internal para certificados auto-firmados.

Instalación de Caddy

Caddy bajo macOS

Para instalar en macOS, se puede ejecutar:

bash
brew install caddy

Caddy bajo Windows

Si bien puedes descargar el instalador para Windows desdel el sitio de Caddy, como alternativa puedes usar Chocolatey (de estar instalado), ejecutando:

bash
choco install caddy

De modo semejante también disponible para Scoop ejecutando: scoop install caddy

Caddy bajo Linux Ubuntu

Para instalar con Linux Ubuntu puedes usar los siguientes comandos:

bash
sudo apt update
sudo apt install -y caddy

Caddy bajo Docker

Para instalar usando Docker, se puede ejecutar:

bash
mkdir -p conf
vim conf/Caddyfile
docker pull docker.io/caddy
docker network create localnet

docker run -d -p 9443:9443 \
    -v $PWD/conf:/etc/caddy \
    -v caddy_data:/data \
    --network localnet \
    --name caddy \
    caddy

Antes de ejecutar docker run ..., usa el ejemplo inicial del archivo Caddyfile para crear el archivo en la carpeta conf y apuntar usar el puerto interno 9443

Usando Caddy como Proxy inverso para una aplicación web

Para ilustrar el uso de Caddy como Proxy inverso con una aplicación web, podemos usar, por ejemplo, n8n. Para ello se edita el archivo Caddyfile agregando un bloque, veamos:

groovy
localhost:9443 {
    root * /usr/share/caddy
    file_server

    handle_path /n8n/* {
        reverse_proxy n8n:5678
    }

    tls internal
}

Con handle_path se puede usar la ruta /n8n y luego se traduce al puerto 5678
Se requiere el contenedor ejecutando, por ejemplo: docker run -d --network localnet --name n8n n8nio/n8n

De este modo podrías probar consultar n8n desde el navegador, o probar ejecutando:

bash
curl https://localhost:9443/n8n

Si algo ha fallado prueba: curl http://localhost:5678

También podría usarse dominio y subdominio, dependiendo de la configuración de tu servidor. Por ejemplo:

groovy
mydomain.vm:9443 {
    root * /usr/share/caddy
    file_server
    tls internal
}

n8n.mydomain.vm:5678 {
    reverse_proxy n8n:5678
    tls internal
}

Con reverse_proxy se configura el subdominio del bloque