No final, depois de MUITO tempo gasto na configuração, estou sem ideias. Algo que deveria ser bem simples está se tornando bem complicado. Espero que outra pessoa possa me ajudar a encontrar a solução.
Estou tentando executar um contêiner com o Traefik. Em vez de colocar toda a configuração no arquivo docker-compose do contêiner (docker-compose.yml), como muitas pessoas fazem, estou colocando a configuração em um arquivo dedicado (traefik.yml), pois é mais flexível para mim.
Tenho o seguinte arquivo docker-compose.yml para o Traefik:
version: "3.8"
services:
traefik:
image: traefik:latest
hostname: traefik
container_name: traefik
restart: unless-stopped
command:
- "--configFile=/traefik.yml"
networks:
- traefik_gw_bridge
ports:
- 80:80
- 443:443
- 8080:8080
volumes:
- ./traefik.yml:/traefik.yml
- logs:/logs
- letsencrypt:/letsencrypt
- /var/run/docker.sock:/var/run/docker.sock:ro
healthcheck:
test: ["CMD", "traefik", "healthcheck", "--ping"]
interval: 10s
timeout: 6s
retries: 2
start_period: 5s
networks:
traefik_gw_bridge:
driver: bridge
external: true
volumes:
letsencrypt:
logs:
E estes são os parâmetros de configuração que estou usando para traefik.yml:
api:
dashboard: true
insecure: false
ping:
entryPoint: web
providers:
docker:
endpoint: "unix:///var/run/docker.sock"
exposedByDefault: false
entryPoints:
web:
address: ":80"
websecure:
address: ":443"
traefik:
address: ":8080"
http:
routers:
dashboard:
rule: "Host(`traefikdash.mydomain.com`)"
entryPoints:
- traefik
service: api@internal
middlewares:
- auth
middlewares:
auth:
basicAuth:
users:
- "admin:$apr1$Nzj4xQwY$QiXQ/eYHzKTFS.Lx.6XG71"
log:
filePath: "/logs/traefik.log"
format: json
level: DEBUG
accessLog:
filePath: "/logs/access.log"
bufferingSize: 150
certificatesResolvers:
le:
acme:
email: "[email protected]"
storage: "/letsencrypt/acme.json"
httpChallenge:
entryPoint: "web"
Logicamente, na parte seguinte do arquivo de configuração, estou tentando definir um roteador para configurar a autenticação básica com um nome de usuário e senha para o Dashboard:
http:
routers:
dashboard:
rule: "Host(`traefikdash.mydomain.com`)" # Reemplaza `yourdomain.com` con tu dominio
entryPoints:
- traefik
service: api@internal
middlewares:
- auth
middlewares:
auth:
basicAuth:
users:
- "admin:$apr1$Nzj4xQwY$QiXQ/eYHzKTFS.Lx.6XG71"
Não consigo obter o resultado que desejo. Quando acesso traefikdash.mydomain.com
or traefikdash.mydomain.com:8080
ou traefikdash.mydomain.com:8080/dashboard
/ traefikdash.mydomain.com/dashboard
, simplesmente recebo as seguintes respostas do Traefik e do meu navegador:
- Página HTTP 404 não encontrada
- Erro de conexão recusada
Depois de tentar vários tipos de configurações, simplesmente não consigo encontrar muito mais informações sobre como implementar a autenticação básica HTTP para acessar o painel do Traefik.
Finalmente encontrei a solução.
A documentação do Traefik não é ruim, mas às vezes também não é muito específica, e precisei contar com a comunidade do StackOverflow para encontrar a resposta definitiva.
O Traefik lida com configurações dedicadas (arquivos de configuração) de diferentes maneiras.
A configuração dinâmica é basicamente a configuração de roteadores e middlewares fornecidos a cada provedor, no meu caso, Configuração de Arquivo Estático.
Então, finalmente, a partir do traefik.yml, você precisa referenciar um arquivo de configuração dinâmica onde você pode implementar o HTTP Basic Auth, da seguinte maneira:
Dessa forma, quando acessei meu domínio de URL, por exemplo,
yourdomain.domain.com:8080
, ele me solicitou corretamente a autenticação do usuário.