Instalación Docker parte 4 Traefik

Seguimos con los tutoriales para Docker y hoy toca montar un reverse-proxy en nuestro caso Traefik.

Con un proxy reverso lo que conseguimos es que todas las peticiones que queramos realizar a los servicios que tenemos instalados las maneja el proxy y sea el que reciba y envie la información necesaria al navegador web. Una de las utilidades es poder acceder a multitud de servicios de nuestro hogar teniendo solo abierto el puerto de traefik, con este tutorial además traefik nos creará certificados via let’s encrypt para tener conexiones ssl seguras.

Antes de empezar con el tutorial aquí teneis los requisitos que necesitais para llevarlo a cabo. Para el tutorial se utiliza la imagen oficial de traefik por lo que deberia funciona en todos los sistemas operativos aunque actualemte solo se ha testado en raspberry pi y Orange pi

Requisitos

  • Docker
  • Docker Compose
  • Puerto 80 y 443 del router redirigidos a los puertos 80 y 443 del host donde vayais a instalar traefik


El puerto 80 lo vamos a utilizar para redirigir con traefik todo el tráfico que entre por http al puerto 443(https) y poder tener certificados de seguridad y toda la información que se envie encriptada.

Para este tutotial vamos a utiliar el user Domology, pero vosotros podéis crear uno nuevo o utilizar alguno exitente y como novedad que no habiamos visto hasta ahora en esta serie de tutoriales es que vamos a utilizar docker-compose para crear nuestro contenedor.

Lo primero es loguearnos a nuestro host por ssh y creamos el usuario y lo añadimos al grupo docker:

useradd -m -s /bin/bash Domology
usermod -aG docker Domology
#reiniciamos docker
systemctl restart docker

Lo siguiente que vamos a hacer es crear una red virtual dentro de docker para asignarsela a traefik

docker network create traefik

Vamos a crear el password para poder acceder al dashboard de traefik, para hacerlo más seguro lo haremos de la forma hash:

#si no lo tenemos intalado
sudo apt install apache2-utils -y
#creamos el psswd
htpasswd -nb Domology domologypassword

La consola nos entregará nuestro usuario y password en este formato:  Domology:$apr1$hEgpZUN2$OYG3KwpzI3T1FqIg9LIbi. Copiamos y y guardamos el password ya que lo necesitaremos más adelante.

Ahora empieza la chicha y vamos a crear los directorios de traefik y sus archivos de configuración:

#logueamos con nuestro usuario
su - Domology

#Creamos directorios de trabajo
mkdir -p traefik/
cd traefik/
#creamos el archivo de configuracion de traefik
nano traefik.toml
Una vez dentro del archivo .toml nos dirigimos a  https://github.com/domology/traefik/blob/master/traefik.toml 

Copiamos en nuestro archivo la configuración y rellenamos con nuestros datos estos parámetros:

  • user:password
  • dominio 
  • email

Llega el turno de preparar el script que usaremos con docker-compose para levantar nuestro container:

version: '3'

services:

  traefik:
    image: traefik:latest
    command: --docker --docker.domain=domology.es
    ports:
      - 80:80
      - 443:443
    networks:
      - traefik
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./traefik.toml:/traefik.toml
      - ./acme.json:/acme.json
    labels:
      - "traefik.frontend.rule=Host:traefik.domology.es"
      - "traefik.port=8080"
    container_name: traefik
    restart: always

networks:
  traefik:
    external: true

Si habeis seguido los demas tutoriales ya estais familiarizados con la mayoria del código anterior, lo único nuevo que se añade es el apartado networks, donde pondremos la red virtual que creamos al principio del post y las labels o etiquetas, con ellas en este caso concreto le estamos indicando a traefik que puerto será el dashboard(8080) y cual será la dirección desde la que accederemos al mismo.

Lo último que nos queda antes de levantar el container es crear el archivo donde lets encrypt guardará los certificados SSL:

touch acme.json
chmod 600 acme.json

Lo único que hacemos es crear un archivo de estensión .json vacio y darle  los permisos correspondientes para que lets encrypt genere y escriba los certificados dentro del archivo.

Ya finalmente toca el momento clave, poner a funcionar el container y para ellos ejecutamos la siguiente orden:

docker-compose up -d

Con ello crearemos el container de traefik y si todo ha ido bien podremos entrar al dashboard del mismo en la dirección que indicamos en las etiquetas.

Logueais poniendo vuestro usuario y contraseña, con la configuración de este tutorial se os crearan los backends de todos los containers que tengais funcionando, pero no serán accesibles, simplemente lo úncio que hace es crear certificados por si queremos añadir dichos servicios.

Para poder acceder desde fuera de nuestra red tenemos dos opciones, la primera si usais docker-compose es añadir las siguientes etiquetas a la hora de crear el container:

labels: 
 - "traefik.enable=true"
 - "traefik.frontend.rule=Host:servicio.tudominio.com"
 - "traefik.port=8089"

Si no usais la etiqueta “trafik.enable” , el proxy no accederá a vuestro servicio y no podréis utilizarlo desde fuera de la red. Para los que useis la consola para levantar los container las equitetas se ponen de la siguiente forma:

 -l "traefik.enable=true"
 -l "traefik.frontend.rule=Host:servicio.tudominio.com"
 -l "traefik.port=8089"

Por último la siguiente forma es añadir a la configuración de traefik reglas para indicarles que servicios van a ir por detras de él, este método es aplicable para cualquier servicio que esté corriendo en vuestro ordenador aunque no esté como un container.

Las reglas se añaden de la siguiente manera en el archivo traefik.toml

[file]
[backends]
  [backends.backend-homeassistant]
    [backends.backend-homeassistant.servers]
      [backends.backend-homeassistant.servers.server-homeassistant-ext]
        url = "http://192.168.0.20:8123"
        weight = 0
[frontends]
  [frontends.frontend-homeassistant]
    backend = "backend-homeassistant"
    passHostHeader = true
#    basicAuth = [
#      HTTP Authentication
#      "xxx:yyyyyyyyyyyy",
#    ]
    [frontends.frontend-homeassistant.routes]
          [frontends.frontend-homeassistant.routes.route-homeassistant-ext]
        rule = "Host:homeassistant.TUDOMINIO.com"		

En este caso hemos añadido home assitant que debido a la necesidad que tiene de acceder a toda la red local para usar el discovery  la mejor solución es levantarlo de forma normal y crear una regla para que se acceder mediante el proxy, si no lo hacemos así se pierde la capacidad del discovery.  Cada regla que querais crear tened en cuenta que dentro del código la parte de los backends deben ir juntos y la parte de los frontends juntos.

Pues hasta aquí el tutorial para instalar un proxy reverso en vuestros ordenadores y pasar servicios por detras de él. Si quereis más información y opciones de configuración aquí tenéis la documentación oficial de traefik

Nos vemos en próximos tutoriales, un saludo!!

Deja un comentario

Síguenos

Siguenos en facebook