Mil servicios con Traefik

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 no podía ser de otra forma, la primera pieza del puzzle de tus auto alojados es un proxy inverso. Aunque estoy ya te lo podías imaginar, por que lo anuncié en la introducción. Lo cierto es que para poder tener diferentes servicios alojados en un mismo servidor y saliendo por el mismo puerto es imprescindible hacer uso de un proxy, y en este caso, para mi, sin lugar a dudas la solución pasa por Traefik.

Así, en esta entrega, te mostraré como puedes levantar tu proxy inverso con Traefik en menos de 10 minutos y sin complicaciones.

Mil servicios con Traefik

Mil servicios con Traefik

¿Que es Traefik?

Aunque le he dedicado un tutorial a [Traefik]() es posible que no conozcas esta herramienta, y esta es la razón para esta breve introducción al mismo. Si quieres profundizar mas en esta herramienta, te recomiendo que le des un vistazo al tutorial, que seguro que le sacarás mas provecho.

En pocas palabras, Traefik es un proxy inverso. Aunque, realmente es mucho mas que un proxy inverso, en el sentido que tiene muchas mas opciones para poner en funcionamiento. Digamos, que se trataría de un proxy inverso supervitaminado y mineralizado.

Así, por ejemplo, no solo te permite conducir el tráfico habitual, sino que también te permite gestionar tráfico TCP y UDP, puedes utilizar middleware, para añadir capas extras como puede ser la autenticación. Igualmente puedes limitar las conexiones.

En fin, que como ves se trata de un proxy inverso con muchas capacidades y al que le puedes sacar mucho jugo.

¿Es muy difícil?

Una vez comprendes la filosofía de Traefik no es nada complejo, sin embargo, tienes que entenderla. Por otro, lado, y esto es un punto de vista personal, el cambio de versión de la 1.X a la 2.X, no le hizo ningún bien. Me refiero a que la configuración cambió tanto, que realmente fue contraproducente.

De cualquier forma, como verás, y siguiendo, la receta que he dejado preparada para este self-hosted, en menos de 10 minutos la puedes tener perfectamente funcionando.

Eso si, si quieres sacar todo el potencial de esta herramienta, tienes que dedicarle tiempo, para estudiarla y comprender como funciona.

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,

A parte de esto, en el caso de que quieras utilizar el middleware de autenticación, que es totalmente opcional, necesitarás instalar la siguiente herramienta,

sudo apt install apache2-utils

En este paquete es donde se encuentra htpasswd.

La receta self-hosted

Allá vamos. Para tener tu servicio de proxy inverso funcionando con Traefik, simplemente tienes que seguir las instrucciones que detallo a continuación.

git clone https://github.com/atareao/self-hosted.git
cd self-hosted/traefik
cp sample.env .env
cp sample.traefik.yml traefik.yml
touch acme.json
chmod 600 acme.json
htpasswd -nb usuario contraseña >> users.txt
docker network create proxy
docker-compose up -d
docker-compose logs -f

Como ves los pasos son realmente sencillos.

  • git clone https://github.com/atareao/self-hosted.git 👉 clonas el repositorio
  • cd self-hosted/traefik 👉 cambias al directorio de Traefik
  • cp sample.env .env 👉 para personalizar la configuración. Aquí tienes que editar este archivo y cambiar el nombre de tu hostname. Esto es fundamental.
  • cp sample.traefik.yml traefik.yml 👉 aquí copias la configuración original de Traefik. Esto te va a permitir tener siempre una copia de la original, por si haces alguna barrabasada.
  • touch acme.json 👉 esto te crea el archivo donde se guardarán los certificados.
  • chmod 600 acme.json 👉 cambia los permisos. Esto es imprescindible para que funcione el protocolo seguro.
  • htpasswd -nb usuario contraseña >> users.txt 👉 Añades una capa de autenticación. Cambia usuario y contraseña por los credenciales que quieras utilizar.
  • docker network create proxy 👉 Crea la red proxy que utilizarás durante todo el proceso
  • docker-compose up -d 👉 Levanta el servicio.
  • docker-compose logs -f 👉 Este paso es prescindible, aunque totalmente recomendable, porque te servirá para encontrar posibles problemas de funcionamiento o mejor dicho de mal funcionamiento.

Y ya lo tienes funcionando.

El vídeo

Lo mismo pero en falso directo, además en este caso levanto también Nginx, para que se vea las ventajas de tener ese proxy inverso funcionando.

8 comentarios en “Mil servicios con Traefik

  1. Jose Manuel hace 3 meses

    Buenas noches, Lorenzo.
    Estoy intentando seguir el tutorial. Tengo un servidor de Ubuntu con LAMP y quiero implementar esto. A la hora de intentar levantar traefik con:
    $ docker-compose up -d

    Me aparece el siguiente error:

    [+] Running 0/1
    ⠿ Container traefik Starting 0.2s
    Error response from daemon: driver failed programming external connectivity on endpoint traefik (81092beb64ba8ec564f60fc055bff3f13f450885008bdcc6bb9c2a7837fb22c7): Error starting userland proxy: listen tcp4 0.0.0.0:80: bind: address already in use

    ¿Es por que tengo habilitado todo lo que monté con LAMP? ¿sabes como podría salir del error de una forma más o menos sencilla?
    La idea que tengo es montar un servidor casero y poder acceder a él desde cualquier parte.

    1. milor hace 3 meses

      Eso es porque el lamp está escuchando en el 80… Deberías levantarlo en otro puerto o mejor con docker!

      1. Jose Manuel hace 3 meses

        Gracias!!!

  2. milor hace 3 meses

    Por cierto, al publicar marca que hace 60 min al menos en mi respuesta anterior.

    Hecho de menos que no se vea cómo usar otros providers el File por ejemplo o/y como ignorar un back con certificado incorrecto (miré en el otro tutorial y tampoco), logré solucionarlo pero a nivel de todos no solo de una ruta…
    Pero muy buen trabajo anda que no saqué información del self-hosted.
    Ahora me falta aprender un poco de volúmenes y como guardarlos/moverlos

  3. scaamanho hace 3 meses

    Personalmente para servirles que están en una red local prefiero no usar lentes encrypt como servidor de certificados y proporcionarle certificados autofirmados y que puedo importar en el navegador o en trusthstore del programa que haga uso de esa conexión.

  4. Milor hace 2 meses

    Yo me he rendido con el rocket.chat… me fue imposible ponerlo a funcionar, no lo veo en tu repositorio.
    ¿has pensado en ponerlo?

    1. atareao hace 2 meses

      Si. Lo tengo levantado en el VPS… He estado probando distintas opciones alternativas a Discord, como Rocket Chat, Matrix y Mattermost…

  5. jselga hace 2 meses

    Hola, he hecho la proueba del ejemplo y me ha funcionado. En primer lugar gracias por la aportación. En mi caso necessito levantar varios multi containers que funcionen a la vez. Entonces bastaria con confirgurar el docker-compose.traefik.yml en cada servicio y su .env correspondiente con distintos subdominios? Y ya por pedir podria mantener activo el apache que tengo en el servidor que usa los puertos 443 y 80? He probado de configurar traefik para otros puertos pero no funciona. Alguna idea? Muchas gracias. Gran trabajo!

Deja una respuesta

Tu dirección de correo electrónico no será publicada.