Docker intermediate
Traefik Reverse Proxy con Docker Compose
Configura Traefik como un proxy inverso con certificados TLS automáticos para tus servicios Docker.
Resumen: Configurar Traefik como un proxy inverso compatible con Docker que obtiene y renueva automáticamente certificados TLS de Let’s Encrypt.
Entorno: Servidor Linux con Docker y Docker Compose instalados. Puertos 80 y 443 disponibles.
Requisitos:
- Docker Engine 24+
- Docker Compose v2
- Un nombre de dominio apuntando a tu servidor
- Puertos 80 y 443 accesibles desde internet
Pasos
1. Crear la Red de Docker
docker network create proxy
2. Estructura de Directorios
/opt/traefik/
├── docker-compose.yml
├── traefik.yml
├── config/
│ └── dynamic.yml
└── letsencrypt/
3. Configuración Estática de Traefik
Crear /opt/traefik/traefik.yml:
api:
dashboard: true
insecure: false
entryPoints:
web:
address: ":80"
http:
redirections:
entryPoint:
to: websecure
scheme: https
websecure:
address: ":443"
providers:
docker:
endpoint: "unix:///var/run/docker.sock"
exposedByDefault: false
network: proxy
certificatesResolvers:
letsencrypt:
acme:
email: [email protected]
storage: /letsencrypt/acme.json
httpChallenge:
entryPoint: web
log:
level: INFO
4. Archivo Docker Compose
Crear /opt/traefik/docker-compose.yml:
services:
traefik:
image: traefik:v3.3
container_name: traefik
restart: unless-stopped
security_opt:
- no-new-privileges:true
networks:
- proxy
ports:
- "80:80"
- "443:443"
volumes:
- /etc/localtime:/etc/localtime:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./traefik.yml:/traefik.yml:ro
- ./letsencrypt:/letsencrypt
labels:
- "traefik.enable=true"
- "traefik.http.routers.dashboard.rule=Host(`traefik.yourdomain.com`)"
- "traefik.http.routers.dashboard.service=api@internal"
- "traefik.http.routers.dashboard.middlewares=auth"
- "traefik.http.middlewares.auth.basicauth.users=admin:${HASHED_PASSWORD}"
networks:
proxy:
external: true
5. Generar Contraseña de Autenticación Básica
sudo apt install apache2-utils
echo $(htpasswd -nb admin TuContraseñaSegura) | sed -e s/\\$/\\$\\$/g
6. Desplegar
cd /opt/traefik
docker compose up -d
Validación
- Visitar
https://traefik.yourdomain.com— debería mostrar el panel - Revisar logs:
docker compose logs traefik - Verificar emisión de certificados TLS:
docker compose exec traefik ls /letsencrypt
Reversión
cd /opt/traefik
docker compose down
Notas
- La etiqueta
traefik.http.middlewares.auth.basicauth.usersrequiere escape$$en el hash de la contraseña debido a la expansión de variables de YAML/Docker Compose. - Para servicios solo internos, usar
traefik.http.routers.service.rule=Host(...)sin exponer puertos. - Siempre fijar las etiquetas de imagen (como
traefik:v3.3) para despliegues en producción.