Este es uno de los capítulos del tutorial Self hosted, auto alojamiento y soberanía digital. Encontrarás los enlaces a todos los de capítulos, al final de este artículo.
Como comenté en el artículo anterior, uno de los problemas que se le achacan a Traefik es su dificultad a la hora de poner en funcionamiento. Pero, como viste, nada mas lejos de la realidad. Es mas una cuestión de desconocimiento que otra cosa. Sin embargo, lo que es innegable es que es tiene muchas mas funcionalidades que un proxy habitual lo que lo hace algo mas complejo. Por esta razón, te traigo un segundo proxy que te va a permitir hacer al menos lo básico de Traefik de forma simple. Aunque como verás prácticamente es lo mismo. Me refiero a Caddy. Un proxy inverso muy ligero, y potente a la vez. Un proxy inverso que te va a permitir levantar otros mil servicios, como dice el título de este artículo.
De hecho, una vez levantados, tanto Traefik, como Caddy, ninguno de los dos te da ningún problema, con la ventaja adicional de Traefik, que te da mas opciones y posibilidades. Si bien es cierto, que si no vas a utilizar estas funcionalidades, para que las quieres. En ese caso, si no vas a utilizar esas funcionalidades, es una buena opción Caddy.
Caddy como proxy inverso pero muy fácil
¿Que es Caddy?
Caddy es un proxy inverso que te permitirá tener diferentes servicios funcionando en un mismo servidor utilizando todos ellos protocolo seguro. Una de las grandes ventajas de este proxy, al igual que sucede con Traefik, es que ambos se encargan de obtener y renovar los certificados para cada uno de tus sitios de forma completamente automática. No te tienes que preocupar de esta tediosa operación.
Caddy a lo Traefik
Uno de los aspectos que me echaban para atrás de Caddy es el archivo de configuración, y la necesidad de reiniciar el Caddy cada vez que añadía un nuevo servicio. Sin embargo, existe un plugin para Caddy que resuelve ambos problemas de un solo plumazo. Se trata de caddy-docker-proxy.
Este plugin, se encarga de escanear la meta información de Docker en busca de etiquetas. En estas etiquetas tenemos que indicar que servicio o contenedor tiene que ser servido por Caddy. Esto es precisamente el mismo funcionamiento que realiza Traefik. Así, la operativa es la misma. Tienes que declarar una red externa, que es la que utilizará Caddy para publicar los servicios, y las correspondientes etiquetas, para indicarle que puerto tiene que utilizar y la url a publicar. Por supuesto, y como venía haciendo, se encargará de gestionar los certificados. Simplemente brutal.
Así, para cualquier servicio que quieras que gestione Caddy, tienes que añadirle lo siguiente,
networks:
- caddy
labels:
caddy: whoami.example.com
caddy.reverse_proxy: "{{upstreams 8000}}"
Y por supuesto añadir la red correspondiente declarándola como externa,
networks:
caddy:
external: true
Pre requisitos
Por supuesto, antes de comenzar con la receta self-hosted, lo primero es tenerlo todo instalado. Para esta, igual, que para el resto de recetas self-hosted, necesitarás docker
y docker-compose
. Estas dos herramientas son imprescindibles. Para instalarlas te recomiendo los siguientes artículos,
- Instalar docker del tutorial de Docker
- Instalar docker-compose del mismo tutorial que te indiqué anteriormente.
La receta self-hosted
Vamos al turrón. A continuación la receta a aplicar y los pasos a seguir para tener tu proxy inverso funcionando en un visto y no visto,
git clone https://github.com/atareao/self-hosted.git
cd self-hosted/caddy
docker network create proxy
docker-compose up -d
docker-compose logs -f
git clone https://github.com/atareao/self-hosted.git
👉 clonas el repositoriocd self-hosted/caddy
👉 cambias al directorio donde se encuentra eldocker-compose
de Caddydocker network create proxy
👉 creas la red de Caddy que se llama proxydocker-compose up -d
👉 levantas el serviciodocker-compose logs -f
👉 compruebas que todo está funcionando correctamente y no hay ninguna sorpresa.
Y ya lo tienes funcionando.
El vídeo
A continuación puedes encontrar el vídeo en el que te muestro exactamente lo mismo pero en falso directo. Verás que en escasos 10 minutos tienes tu proxy inverso perfectamente funcional. Además te muestro como puedes levantar un Nginx por el mismo precio.
Imagen de portada de Elsa Gonzalez en Unsplash
Buen tutorial!! interesante caddy. Pregunta: ¿qué terminal usas en el vídeo y qué tema? Gracias!!
El terminal es Kitty y el tema es «ayu»
Buen tutorial!! interesante caddy. Pregunta: ¿qué terminal usas en el vídeo y qué tema? Gracias!!
Hola, Lorenzo, una duda.
Al terminar, si escribo docker-compose logs -f salen varias líneas con esto:
caddy-caddy-1 | standard_init_linux.go:228: exec user process caused: exec format error
…
…
caddy-caddy-1 | standard_init_linux.go:228: exec user process caused: exec format error
caddy-caddy-1 exited with code 1
¿A qué puede ser debido? y lo más importante, ¿es fácilmente solucionable? ¿cómo?
Gracias.
Tengo raspbian 64 actualizado.
Vale, ya he visto cual puede ser el problema:
«This can happen if you’re trying to run an x86 built image on an arm64/aarch64 machine.
You’ll need to rebuild the image using the corresponding architecture»
Lo que no sé es cómo solucionarlo.
Desinstalando Caddy y buscando contenedores de 64 bits, supongo.
:/
Si, efectivamente ese es el problema, Eduardo, has dado con la tecla. Hay que crear esa imagen.
Lo lamento.
Un saludo.
Gracias, Lorenzo.
Me estoy metiendo con esto en los ratos libres (una tarde al mes, más o menos). Quería agradecerte tu ayuda y tu esfuerzo para que todos vayamos perdiéndole el miedo a linux.
Buen finde.
Muchas gracias. Si necesitas cualquier cosa no dudes en indicarme.
Gracias
Hola Lorenzo,
Estoy intentando instalar caddy o en su defecto traefik en un vps y siempre recibo el mismo error por lo que tengo alguna configuración que me genera conflicto pero no sé determinar cual. ¿Tienes alguna idea de cual puede ser la causa de este error? Gracias de antemano.
* El error se produce al ejecutar «docker-compose up -d»
Status: Downloaded newer image for lucaslorentz/caddy-docker-proxy:latest
Creating caddy_caddy_1 …
Creating caddy_caddy_1 … error
ERROR: for caddy_caddy_1 Cannot start service caddy: driver failed programming external connectivity on endpoint caddy_caddy_1 (73f99ba3c5f76232266d8706d648c3d1d6925f34819fa63b1f23d4edef9315fb): Error starting userland proxy: listen tcp4 0.0.0.0:443: bind: address already in use
ERROR: for caddy Cannot start service caddy: driver failed programming external connectivity on endpoint caddy_caddy_1 (73f99ba3c5f76232266d8706d648c3d1d6925f34819fa63b1f23d4edef9315fb): Error starting userland proxy: listen tcp4 0.0.0.0:443: bind: address already in use
ERROR: Encountered errors while bringing up the project
Me autorespondo…
He visto que tenía el apache2 utilizando el puerto 443 y por eso me daba error. Siento las molestias.
Hola Juan,
Pues precisamente eso te iba a decir, pero ya veo que te has adelantado. Lo cierto es que tanto Caddy, como Traefik, pero sobre todo el primero, tienen poco misterio. Normalmente los errores vienen de que alguien ya está ocupando el puerto necesario. Igual que sucede para la generación de certificados. Si tienes algún servicio ocupando el puerto 80, también sucede algo similar.
Saludos.