Træfik es una herramienta muy interesante para utilizar como proxy inverso. Es muy sencillo el desplegarlo y la configuración de este es casi automática.
Creamos, primero, el directorio donde dejaremos el fichero de configuración, con el comando:
mkdir traefik && cd traefik
Descargamos el fichero de configuración:
wget http://raw.githubusercontent.com/ichasco/traefik/master/traefik.toml
Creamos la red de traefik, con el siguiente comando:
docker network create traefik
Para acceder con usuario y contraseña, al panel de traefik, ejecutamos el siguiente comando, para encriptar la contraseña:
htpasswd –nb usuario password
ahora que tenemos el password encriptado, lo introducimos en el fichero de configuración, para ello, editamos el fichero traefik.toml
Debajo de [web]
# Web administration port
#
# Required
#
address = ":8080"
Añadimos:
[web.auth.basic]
users = ["usuario:password_encriptado_con_htpasswd"]
También, establecemos el nombre del dominio, cambiando la línea domain:
# Required
#
domain = "nombre_del_dominio"
Si tenemos los servidores en granja, cambiamos la siguiente línea:
# Optional
#
swarmmode = false
por
# Optional
#
swarmmode = true
De no tenerlos en granja, dejamos esta línea sin tocar.
Guardamos el fichero.
Ahora, procedemos a desplegar el contenedor, con el siguiente comando:
docker run -d -p 8100:8080 -p 80:80 --network traefik --name traefik_proxy -v $PWD/traefik.toml:/etc/traefik/traefik.toml -v /var/run/docker.sock:/var/run/docker.sock --restart=always traefik
Para acceder, usaremos la ip del servidor y el puerto 8100
Nos pedirá el usuario y el password, que le hemos definido:
Automáticamente, descubrirá los contenedores corriendo, y creará las entradas también de forma automática, usando el nombre del contenedor y agregando el dominio especificado.
Nota: Los contenedores tienen que estar en la nueva red de traefik. Un contenedor, puede estar en varias redes a la vez.
Con la configuración actual de træfik, solo se puede acceder por el puerto 80. Si se quisiese acceder por el puerto 443 habría que hacer lo siguiente
http con Let’s Encrypt
Træfik tiene una opción muy interesante, que es crear certificados al vuelo con let’s encrypt. Para quien no conozca let’s encrypt, es una entidad certificadora gratuita y conocida por todos los navegadores. Con esta opción, una vez levantado el docker con el servicio, træfik crea automáticamente un certificado y puede llegar a forzar las conexiones por el puerto 443 para garantizar la seguridad de estas.
Para hacer esto, lo único que hay que hacer es editar el traefik.toml y añadir lo siguiente:
defaultEntryPoints = ["http", "http"]
[acme]
email = "[email protected]"
storageFile = "/etc/traefik/acme/acme.json"
entryPoint = "http"
acmeLogging = true
onDemand = true
OnHostRule = true
[entryPoints]
[entryPoints.http]
address = ":80"
[entryPoints.http.redirect]
entryPoint = "http"
[entryPoints.http]
address = ":443"
[entryPoints.http.tls]