Caddy como proxy inverso pero muy fácil

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,

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 repositorio
  • cd self-hosted/caddy 👉 cambias al directorio donde se encuentra el docker-compose de Caddy
  • docker network create proxy 👉 creas la red de Caddy que se llama proxy
  • docker-compose up -d 👉 levantas el servicio
  • docker-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

11 comentarios en “Caddy como proxy inverso pero muy fácil

  1. MS
    ms.varios hace 2 años

    Buen tutorial!! interesante caddy. Pregunta: ¿qué terminal usas en el vídeo y qué tema? Gracias!!

  2. MS
    msvarios hace 2 años

    Buen tutorial!! interesante caddy. Pregunta: ¿qué terminal usas en el vídeo y qué tema? Gracias!!

  3. ED
    Eduardo hace 2 años

    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.

    1. ED
      Eduardo hace 2 años

      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.
      :/

      1. AT
        atareao hace 2 años

        Si, efectivamente ese es el problema, Eduardo, has dado con la tecla. Hay que crear esa imagen.
        Lo lamento.
        Un saludo.

        1. ED
          Eduardo hace 2 años

          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.

          1. AT
            atareao hace 2 años

            Muchas gracias. Si necesitas cualquier cosa no dudes en indicarme.
            Gracias

  4. JU
    Juan hace 10 meses

    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

    1. JU
      Juan hace 10 meses

      Me autorespondo…
      He visto que tenía el apache2 utilizando el puerto 443 y por eso me daba error. Siento las molestias.

      1. AT
        atareao hace 10 meses

        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.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *