En este tutorial, configurará Traefik v2 para enrutar solicitudes a dos contenedores de aplicaciones diferentes.
Requisitos previos
Para completar este tutorial, necesitará lo siguiente:
- Un servidor Ubuntu 20.04 con un usuario sudo. Puede configurar esto siguiendo nuestra guía de configuración inicial del servidor Ubuntu 20.04.
- Docker instalado en su servidor, lo que puede lograr siguiendo el siguiente tutorial (esta guía tambien funciona para docker instalado en servidores con procesadores ARM64)
- Docker Compose se instaló siguiendo las instrucciones del Paso 1 de Cómo instalar Docker Compose en Ubuntu 20.04.
- Un dominio y un registros A, monitor.tu_dominio. Esta debe apuntar a la dirección IP de su servidor.
A lo largo de este tutorial, sustituya yourdomain por su_dominio en los archivos de configuración y ejemplos
Paso 1: Configurar y ejecutar Traefik
mkdir -p data/configurations
touch docker-compose.yml
touch data/traefik.yml
touch data/acme.json
touch data/configurations/dynamic.yml
chmod 600 data/acme.json
Paso 2: Creacion de archivo docker-compose.yml
File location ~/docker-compose.yml
version: '3.7'
services:
traefik:
image: traefik:v2.4
container_name: traefik
restart: always
security_opt:
- no-new-privileges:true
ports:
- 80:80
- 443:443
volumes:
- /etc/localtime:/etc/localtime:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./data/traefik.yml:/traefik.yml:ro
- ./data/acme.json:/acme.json
# Add folder with dynamic configuration yml
- ./data/configurations:/configurations
networks:
- proxy
labels:
- "traefik.enable=true"
- "traefik.docker.network=proxy"
- "traefik.http.routers.traefik-secure.entrypoints=websecure"
- "traefik.http.routers.traefik-secure.rule=Host(`traefik.yourdomain`)"
- "traefik.http.routers.traefik-secure.middlewares=user-auth@file"
- "traefik.http.routers.traefik-secure.service=api@internal"
networks:
proxy:
external: true
Paso 3 : Configuracion de rutas estaticas
En este paso debes definir los parametros de configuracion realacionados a tu dominio y tu direccion de correo .
File location ~/data/traefik.yml
api:
dashboard: true
entryPoints:
web:
address: :80
http:
redirections:
entryPoint:
to: websecure
websecure:
address: :443
http:
middlewares:
- secureHeaders@file
- nofloc@file
tls:
certResolver: letsencrypt
pilot:
dashboard: false
providers:
docker:
endpoint: "unix:///var/run/docker.sock"
exposedByDefault: false
file:
filename: /configurations/dynamic.yml
certificatesResolvers:
letsencrypt:
acme:
email: admin@yourdomain
storage: acme.json
keyType: EC384
httpChallenge:
entryPoint: web
buypass:
acme:
email: admin@yourdomain
storage: acme.json
caServer: https://api.buypass.com/acme/directory
keyType: EC256
httpChallenge:
entryPoint: web
Paso 4 : Configuracion dinamica
File location ~/data/configurations/dynamic.yml
# Dynamic configuration
http:
middlewares:
nofloc:
headers:
customResponseHeaders:
Permissions-Policy: "interest-cohort=()"
secureHeaders:
headers:
sslRedirect: true
forceSTSHeader: true
stsIncludeSubdomains: true
stsPreload: true
stsSeconds: 31536000
# UserName : admin
# Password : qwer1234
user-auth:
basicAuth:
users:
- "admin:$apr1$tm53ra6x$FntXd6jcvxYM/YH0P2hcc1"
tls:
options:
default:
cipherSuites:
- TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
- TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
- TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
- TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305
- TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305
minVersion: VersionTLS12
Una vez ingresado la configuracion en los archivos correspondientes, nos dirigimos al directorio /data
e inciamos nuestro contenedor traefik, debemos verificar que en dicho directorio, se encuentre el archivo traefik.yml
docker-compose up -d
Luego de iniciar nuestro contenedor, podemos ingresar via web al servicio de traefik (Recomedamos que no se publique el puerto 80 para evitar cualquier riego)

no olvidemos que al ingresar nos pedira nuestras credenciales de acceso que definimos en el archivo dynamic.yml
- UserName: admin
- Password: qwer1234
Conclusión
En este artículo, ha aprendido a configurar traefik en Ubuntu 20.04. Tiene una idea de cómo registrar contenedores automáticamente en traefik para el equilibrio de carga y el proxy inverso.