Caddy como proxy inverso pero muy fácil

Self hosted, auto alojamiento y soberanía digital

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

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

  1. ms.varios hace 1 año

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

  2. msvarios hace 1 año

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

  3. Eduardo hace 1 año

    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. Eduardo hace 1 año

      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. atareao hace 1 año

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

        1. Eduardo hace 1 año

          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. atareao hace 1 año

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

Deja una respuesta

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