Este projeto implanta uma instância do Traefik Proxy conteinerizada, pronta para operar como o ponto de entrada (edge router) da sua infraestrutura. O foco é ser uma solução robusta, segura e de fácil manutenção para ambientes on-premise.
A complexidade da gestão é abstraída por um Makefile, que serve como uma interface de controle padronizada, garantindo que as operações de setup, deploy e manutenção sejam consistentes e previsíveis.
Versão do Traefik: v3.6.9
- ⚡ Guia Rápido de Deployment - Setup em 5 minutos
- ✅ Pré-requisitos - O que você precisa
- 🏗️ Arquitetura - Como funciona
- 🔑 Secrets vs Configs - Diferenças importantes
- ⚙️ Docker Configs para Arquivo de Configuração - Como usar configs
# 1. Setup (cria arquivos de configuração)
make setup
# 2. Editar .env conforme necessário
vim .env
# 3. Iniciar
make compose-up
# 4. Acessar dashboard
# https://traefik.seudominio.com.br/dashboard/# 1. Setup
make setup
# 2. Criar rede overlay (se não existir)
# O Makefile cria automaticamente com make setup
# 3. Criar secrets e configs (certificados + credenciais)
make swarm-create-secrets
make swarm-create-configs
# 4. Deploy
make swarm-deploy
# 5. Acessar dashboard
# https://traefik.seudominio.com.br/dashboard/INTERNET ───> [Portas 80, 443] ───> TRAEFIK ───> REDE OVERLAY ───> SERVIÇO-ALVO
(HTTPS) (TLS Termination) (Docker Swarm)
│
└──> Dashboard (Basic Auth)
| Modo | Comando | Uso Ideal | Gerenciamento |
|---|---|---|---|
| Docker Compose | make compose-up |
Desenvolvimento, single-node | Volumes locais |
| Docker Swarm | make swarm-deploy |
Produção, multi-node | Secrets + Configs |
Em um Docker Swarm com múltiplos nós, você precisa:
- Distribuir configurações (traefik.yaml, dynamic.yaml) → Usar Configs
- Proteger dados sensíveis (senhas, chaves) → Usar Secrets
Para: Dados sensíveis que precisam ser protegidos
# Criar
docker secret create TRAEFIK_CREDENTIALS config/credentials
docker secret create TRAEFIK_SENAICIMATEC_KEY certs/senaicimatec_com_br/key.pem
# Características
✅ Criptografados em repouso no Swarm
✅ Apenas nós que precisam recebem o dado
✅ Impossível recuperar o valor depois de criado
✅ Requer recreação para atualizarDados sensíveis no projeto:
TRAEFIK_CREDENTIALS→ senhas do dashboardTRAEFIK_*_KEY→ chaves privadas SSL/TLSTRAEFIK_*_CRT→ certificados SSL/TLS
Para: Dados de configuração públicos que precisam ser distribuídos
# Criar
docker config create TRAEFIK_STATIC config/traefik-swarm.yaml
docker config create TRAEFIK_DYNAMIC config/dynamic.yaml
# Características
✅ Distribuídos a todos os nós
✅ Versionados automaticamente
✅ Histórico de mudanças
✅ Fácil atualizar (remover e recriar)Dados de configuração no projeto:
TRAEFIK_STATIC→ traefik-swarm.yamlTRAEFIK_DYNAMIC→ dynamic.yaml
┌─────────────────────────────────────────────────────────┐
│ Docker Swarm Manager │
├─────────────────────────────────────────────────────────┤
│ │
│ Secrets (Criptografados): │
│ ├─ TRAEFIK_CREDENTIALS ─────┐ │
│ ├─ TRAEFIK_SENAICIMATEC_KEY │ │
│ └─ TRAEFIK_JBTH_KEY ────────┤ Apenas nós que │
│ │ precisam recebem │
│ Configs (Abertos): │ │
│ ├─ TRAEFIK_STATIC ──────────┼──→ Todos os nós │
│ └─ TRAEFIK_DYNAMIC ─────────┘ │
│ │
└─────────────────────────────────────────────────────────┘
↓
┌─────────────────┬─────────────────┬─────────────────┐
│ Nó 1 │ Nó 2 │ Nó N │
│ (Manager) │ (Worker) │ (Worker) │
├─────────────────┼─────────────────┼─────────────────┤
│ /run/secrets/: │ /run/secrets/: │ /run/secrets/: │
│ - credentials │ - credentials │ - credentials │
│ - ...keys │ - ...keys │ - ...keys │
│ │ │ │
│ /var/lib/.../: │ /var/lib/.../: │ /var/lib/.../: │
│ - traefik.yaml │ - traefik.yaml │ - traefik.yaml │
│ - dynamic.yaml │ - dynamic.yaml │ - dynamic.yaml │
└─────────────────┴─────────────────┴─────────────────┘
- Docker Engine e Docker Compose (para modo standalone)
- Docker Swarm inicializado (para modo Swarm)
- Shell compatível com
bash(Linux, macOS ou WSL2) htpasswd: Utilitário para gerar senhas hasheadas (parte doapache2-utils)
git clone https://github.com/RafaelQSantos-RQS/traefik
cd traefikmake setupO que este comando faz:
- Cria o arquivo
.enva partir do template (.env.template) - Detecta o hostname da máquina e pré-configura no
.env - Gera o arquivo de credenciais (
config/credentials) - Cria a rede Docker externa (se não existir)
⚠️ Importante: Após a primeira execução, edite o arquivo.envcom suas configurações.
Abra o arquivo .env e configure:
# Versão do Traefik (SEMPRE fixe uma versão!)
TRAEFIK_VERSION=v3.6.9
# Domínio principal
DOMAIN=seudominio.com.br
TRAEFIK_HOST=traefik.${DOMAIN}
# Credenciais do Dashboard
DASH_USER=admin
DASH_PASS=sua_senha_segura
# Rede externa (Docker Compose)
EXTERNAL_DOCKER_NETWORK=web
⚠️ Nota: Os certificados agora são gerenciados via Docker Secrets. Veja a seção Certificados SSL/TLS para mais detalhes.
make setupO Traefik em modo standalone usa:
- Rede externa:
web(criada automaticamente ou existente) - Provider: Docker (via socket)
- Descoberta automática: Labels nos containers
Para criar a rede externa manualmente:
docker network create -d bridge web# Iniciar o Traefik
make compose-up
# Verificar status
make compose-status
# Ver logs
make compose-logsmake compose-downO Docker Swarm permite executar o Traefik em modo cluster, com suporte a:
- Routing Mesh: Balanceamento automático de carga
- Service Discovery: Descoberta automática de serviços
- Alta Disponibilidade: Múltiplas réplicas (recomendado 1 para o Traefik)
Crie a rede overlay para o Swarm:
docker network create -d overlay swarm-net --attachable
⚠️ Importante: Se houver conflito de rede (erro "invalid pool request"), use uma subnet diferente:docker network create -d overlay --attachable --subnet=10.10.0.0/24 swarm-net
Antes do deploy, você deve criar os secrets (certificados e credenciais) e configs (arquivos YAML). O Makefile facilita isso:
# Criar todos os secrets (credentials + certificados)
make swarm-create-secrets
# Criar configs para arquivos YAML
make swarm-create-configs# Verificar configs
make swarm-check-configs
# Verificar secrets
make swarm-check-secrets# Deploy no Swarm (já verifica configs e secrets automaticamente)
make swarm-deploy
# Verificar status
make swarm-status
# Ver logs
make swarm-logs
# Remover do Swarm
make swarm-removeNo Swarm, as portas podem ser expostas de duas formas:
| Mode | Descrição | Use Quando |
|---|---|---|
host |
Bind direto no nó | Quer evitar o routing mesh, alta performance single-node |
ingress (padrão) |
Routing mesh do Swarm | Multi-node, balanceamento automático |
Exemplo com ingress (padrão):
ports:
- target: 80
published: 80
protocol: tcp
# mode: ingress é o padrão, pode omitir
- target: 443
published: 443
protocol: tcpExemplo com host:
ports:
- target: 80
published: 80
protocol: tcp
mode: host
- target: 443
published: 443
protocol: tcp
mode: hostO projeto configura TLS 1.3 como versão mínima com ciphers seguros:
tls:
options:
default:
minVersion: "VersionTLS13"
cipherSuites:
- "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"
- "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"
- "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256"
- "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384"Middleware configurado para prevenir ataques DDoS:
- Average: 100 requisições/segundo
- Burst: 50 requisições adicionais
As credenciais do dashboard são armazenadas em Docker Secret (TRAEFIK_CREDENTIALS), não em arquivo volume.
O arquivo local config/credentials ainda existe localmente para gerenciamento, mas as alterações são sincronizadas automaticamente para o Docker Secret.
Formato (htpasswd bcrypt):
admin:$apr1$H6uskkkW$IgXLP6ewTrSuBkTrqE8wj/
# Adicionar usuário
make add-user USERNAME=novouser PASS=senha123
# Atualizar senha
make update-user USERNAME=admin PASS=nova_senha
# Deletar usuário
make delete-user USERNAME=admin
# Listar usuários
make list-usersO arquivo config/credentials usa formato htpasswd:
# Gerar manualmente
htpasswd -nbm usuario senha
⚠️ Importante: Após adicionar/modificar usuários, reinicie o Traefik:make compose-restart # Docker Compose make swarm-deploy # Swarm (redeploy)
O Dashboard está disponível em:
https://seudominio.com.br/dashboard/
Autenticação: Basic Auth (usuário/senha configurados no .env)
Endpoint de métricas:
https://seudominio.com.br/metrics
O host do dashboard é definido pela variável TRAEFIK_HOST no .env:
TRAEFIK_HOST=traefik.seudominio.com.brPara testar localmente, adicione entries no /etc/hosts:
127.0.0.1 traefik.seudominio.com.br
| Comando | Descrição |
|---|---|
make setup |
Gera configurações a partir dos templates |
make sync |
Sincroniza com repositório remoto |
| Comando | Descrição |
|---|---|
make add-user |
Adiciona usuário ao dashboard |
make update-user |
Atualiza senha de usuário |
make delete-user |
Remove usuário do dashboard |
make list-users |
Lista usuários cadastrados |
| Comando | Descrição |
|---|---|
make compose-up |
Inicia o Traefik |
make compose-down |
Para o Traefik |
make compose-restart |
Reinicia o Traefik |
make compose-logs |
Mostra logs em tempo real |
make compose-status |
Verifica status dos containers |
make compose-pull |
Baixa novas versões das imagens |
| Comando | Descrição |
|---|---|
make swarm-create-configs |
Cria configs do Swarm |
make swarm-create-secrets |
Cria todos os secrets (credentials + certificados) |
make swarm-update-configs |
Atualiza configs do Swarm |
make swarm-update-secrets |
Atualiza todos os secrets |
make swarm-remove-configs |
Remove configs do Swarm |
make swarm-remove-secrets |
Remove secrets do Swarm |
make swarm-check-configs |
Verifica se configs existem |
make swarm-check-secrets |
Verifica se secrets existem |
make swarm-deploy |
Deploy no Docker Swarm |
make swarm-remove |
Remove do Docker Swarm |
make swarm-status |
Status da stack no Swarm |
make swarm-logs |
Logs do Swarm |
.
├── Makefile # Automação de comandos (setup, deploy, etc)
├── docker-compose.yaml # Configuração para Docker Compose (standalone)
├── docker-stack.yml # Configuração para Docker Swarm (com configs e secrets)
├── .env # Variáveis de ambiente (criado por make setup, ignorado pelo Git)
├── .env.template # Template para .env (versionado no Git)
│
├── templates/ # Templates para geração automática
│ ├── traefik.yaml.template # Template da config estática
│ ├── dynamic.yaml.template # Template da config dinâmica
│ ├── traefik-swarm.yaml.template
│ └── credentials.template
│
├── config/ # Configurações geradas (valores reais)
│ ├── traefik.yaml # Config estática para Docker Compose
│ ├── traefik-swarm.yaml # Config estática para Docker Swarm
│ ├── dynamic.yaml # Config dinâmica (ambos os modos)
│ ├── dynamic-swarm.yaml # Config dinâmica alternativa
│ ├── credentials # Arquivo de credenciais (htpasswd)
│ └── README.md # Documentação dessa pasta
│
├── certs/ # Certificados SSL/TLS (fonte para Docker Secrets)
│ ├── senaicimatec_com_br/
│ │ ├── senaicimatec_com_br.pem
│ │ └── senaicimatec_com_br.key
│ ├── jbth/
│ │ ├── full_chain_jbth.crt
│ │ └── jbth.com.br.key
│ ├── universidadesenaicimatec_edu_br/
│ │ ├── fullchain_universidadesenaicimatec.edu.brv2.pem
│ │ └── universidadesenaicimatec.edu.brv2.key
│ └── README.md # Documentação dessa pasta
│
└── README.md # Este arquivo
Docker Compose │ Docker Swarm
────────────────────────┼──────────────────────────────────
Local volumes │ Docker Secrets + Docker Configs
./config/ → volumes │ ./config/ → docker config create
./certs/ → volumes │ ./certs/ → docker secret create
.env → variáveis │ .env → variáveis + secrets
Docker Configs é um mecanismo do Docker Swarm para distribuir dados de configuração (não-sensíveis) entre nós do cluster. Diferentemente de volumes locais, configs garantem que:
- ✅ Configurações sejam consistentes em todos os nós do Swarm
- ✅ Atualizações automáticas quando o arquivo de configuração é alterado
- ✅ Histórico e versionamento de configurações
- ✅ Separação clara entre código, configuração e secrets
Antes (com volumes locais):
# Cada nó precisa ter o arquivo traefik.yaml
# Sincronização manual de alterações entre nós
# Sem histórico de mudanças
volumes:
- ./config/traefik-swarm.yaml:/etc/traefik/traefik.yaml:roDepois (com Docker Configs):
# Um único arquivo, distribuído automaticamente
# Versionamento automático de mudanças
# Sincronização garantida entre todos os nós
configs:
- source: TRAEFIK_STATIC
target: /etc/traefik/traefik.yamlO arquivo já está configurado corretamente:
services:
proxy:
# ... outras configurações ...
configs:
- source: TRAEFIK_STATIC
target: /etc/traefik/traefik.yaml
- source: TRAEFIK_DYNAMIC
target: /etc/traefik/dynamic.yaml
# Declaração de configs no final do arquivo
configs:
TRAEFIK_STATIC:
external: true
TRAEFIK_DYNAMIC:
external: true# Setup cria os arquivos locais
make setupIsso gera:
config/traefik.yaml(configuração estática para Compose)config/traefik-swarm.yaml(configuração estática para Swarm)config/dynamic.yaml(configuração dinâmica)
Antes de fazer deploy, os configs devem existir no Swarm:
# Criar configs do Traefik
make swarm-create-configs# Deploy (verifica se configs existem)
make swarm-deployQuando você modifica os arquivos YAML:
# Editar o arquivo
vim config/traefik-swarm.yaml
# Atualizar no Swarm
make swarm-update-configs
# Redeploy para aplicar mudanças
make swarm-deployConfiguração estática - define a estrutura do Traefik:
# Portas de entrada (entry points)
entryPoints:
web: # HTTP (porta 80)
websecure: # HTTPS (porta 443)
# Providers (descobre serviços)
providers:
swarm: # Descobre via Docker Swarm
file: # Lê arquivo dinâmico
# Dashboard e métricas
api:
dashboard: true
metrics:
prometheus:
entryPoint: websecure
# Logs
log:
format: json
level: INFOQuando mudar: Raramente. Apenas quando você quer:
- Adicionar novo entrypoint
- Mudar estrutura de logging
- Modificar provedor de serviços
Configuração dinâmica - define rotas, middlewares e certificados:
http:
# Middlewares (autenticação, rate-limit, etc)
middlewares:
basic-auth:
basicAuth:
usersFile: /etc/traefik/secrets/credentials
tls:
# Certificados SSL/TLS
certificates:
- certFile: "/etc/traefik/certs/..."
keyFile: "/etc/traefik/certs/..."Quando mudar: Frequentemente:
- Adicionar novo certificado
- Modificar middlewares
- Ajustar rate-limiting
O projeto mantém dois arquivos de configuração estática para suportar os dois modos de deploy:
| Aspecto | traefik.yaml (Compose) | traefik-swarm.yaml (Swarm) |
|---|---|---|
| Ubicação | config/traefik.yaml |
config/traefik-swarm.yaml |
| Provider | docker |
swarm |
| Uso | Docker Compose (standalone) | Docker Swarm (cluster) |
| Service Discovery | Via Docker API (local) | Via Docker Swarm labels |
| Certificados | Volumes locais | Docker Secrets |
| Arquivo dinâmico | dynamic.yaml |
dynamic.yaml |
| Acesso socket | /var/run/docker.sock |
/var/run/docker.sock |
Provider diferenças:
traefik.yaml (Docker Compose):
providers:
docker:
endpoint: unix:///var/run/docker.sock
exposedByDefault: falsetraefik-swarm.yaml (Docker Swarm):
providers:
swarm:
endpoint: unix:///var/run/docker.sock
exposedByDefault: falseNota: A escolha do provider é a diferença crítica. Docker Compose usa
docker, Swarm usaswarm. O arquivo dinâmico pode ser compartilhado entre ambos.
| Aspecto | Configs | Secrets |
|---|---|---|
| Tipo de dado | Configurações públicas | Dados sensíveis |
| Visibilidade | Armazenados em texto plano | Criptografados em repouso |
| Uso | Arquivos YAML, certificados | Senhas, chaves privadas |
| No projeto | traefik.yaml, dynamic.yaml | credentials, certificados |
Neste projeto:
- ✅ Configs →
traefik-swarm.yaml,dynamic.yaml - ✅ Secrets → credenciais, certificados SSL
# 1. Fazer setup
make setup
# 2. Criar todos os secrets (credentials + certificados)
make swarm-create-secrets
# 3. Criar configs para YAML
make swarm-create-configs
# 4. Verificar configs
make swarm-check-configs
# 5. Verificar secrets
make swarm-check-secrets
# 6. Deploy!
make swarm-deploy
# 7. Verificar status
make swarm-statusProblema: "external config not found: TRAEFIK_STATIC"
# Solução: Criar o config
make swarm-create-configsProblema: Mudanças em traefik.yaml não aparecem
# Solução: Atualizar e redeploy
make swarm-update-configs
make swarm-deployProblema: Atualizar certificados
# Solução: Atualizar secrets
make swarm-update-secrets
make swarm-deployO Makefile facilita o gerenciamento de certificados usando Docker Secrets:
# Criar todos os secrets de uma vez (credentials + todos os certificados)
make swarm-create-secrets# Atualizar certificados ou credenciais
make swarm-update-secrets
# Redeploy para aplicar
make swarm-deploymake swarm-check-secretsdocker secret lsmake swarm-remove-secrets
⚠️ Nota: Após criar/atualizar secrets, faça redeploy do serviço:make swarm-deploy
As credenciais são gerenciadas automaticamente pelo Makefile:
# Setup inicial (cria o secret automaticamente)
make setup
# Adicionar usuário (atualiza o secret automaticamente)
make add-user USERNAME=admin PASS=nova_senha
# Atualizar senha
make update-user USERNAME=admin PASS=senha_nova
# Deletar usuário
make delete-user USERNAME=admin
⚠️ Nota: Os comandos do Makefile atualizam automaticamente o Docker Secret. Não é necessário fazer isso manualmente.
Adicione seus certificados no arquivo config/dynamic.yaml:
tls:
certificates:
- certFile: "/etc/traefik/certs/seu-dominio/cert.pem"
keyFile: "/etc/traefik/certs/seu-dominio/key.pem"
⚠️ Nota: Os certificados são armazenados em Docker Secrets, não mais em volume. O diretóriocerts/é usado apenas como fonte para criar os secrets.
certs/
├── senaicimatec_com_br/
│ ├── senaicimatec_com_br.pem
│ └── senaicimatec_com_br.key
├── outro-dominio/
│ ├── fullchain.crt
│ └── dominio.key
└── ...
Para que um serviço seja descoberto pelo Traefik, adicione as seguintes labels no seu serviço:
services:
meu-servico:
image: nginx:latest
networks:
- web # Mesma rede do Traefik
deploy:
labels:
# Habilita a descoberta pelo Traefik
traefik.enable: "true"
# Porta do serviço (obrigatório para services)
traefik.http.services.meu-servico.loadbalancer.server.port: "80"
# Router (opções comuns)
traefik.http.routers.meu-servico.rule: "Host(`meusite.com.br`)"
# Entrypoint (http ou https)
traefik.http.routers.meu-servico.entrypoints: "websecure"
# TLS (se usar HTTPS)
traefik.http.routers.meu-servico.tls: "true"services:
meu-servico:
image: nginx:latest
networks:
- swarm-net # Rede overlay do Swarm
deploy:
labels:
traefik.enable: "true"
traefik.http.services.meu-servico.loadbalancer.server.port: "80"
traefik.http.routers.meu-servico.rule: "Host(`meusite.com.br`)"
traefik.http.routers.meu-servico.entrypoints: "websecure"
traefik.http.routers.meu-servico.tls: "true"| Label | Descrição | Exemplo |
|---|---|---|
traefik.enable |
Habilita/desabilita o serviço | true |
traefik.http.routers.<name>.rule |
Regra de roteamento | Host(\example.com`)` |
traefik.http.routers.<name>.entrypoints |
EntryPoint | web ou websecure |
traefik.http.routers.<name>.tls |
Habilita TLS | true |
traefik.http.services.<name>.loadbalancer.server.port |
Porta do serviço | 8080 |
traefik.http.middlewares.<name>.basicauth.users |
Basic Auth | user:pass |
traefik.http.routers.<name>.middlewares |
Middlewares | auth@file,rateLimit@file |
# Single host
traefik.http.routers.app.rule: "Host(`app.example.com`)"
# Multiple hosts
traefik.http.routers.app.rule: "Host(`app.example.com`) || Host(`app2.example.com`)"
# Path
traefik.http.routers.app.rule: "PathPrefix(`/api`)"
# Host + Path
traefik.http.routers.app.rule: "Host(`app.example.com`) && PathPrefix(`/api`)"Ao usar middlewares em Docker Swarm, é importante entender a sintaxe correta:
Em Docker Compose - Middlewares definidos em arquivo YAML (dynamic.yaml):
deploy:
labels:
traefik.http.routers.app.middlewares: "basic-auth@file,rate-limit@file"Em Docker Swarm - Middlewares definidos via deploy.labels do serviço Traefik:
deploy:
labels:
traefik.http.routers.app.middlewares: "basic-auth@swarm,rate-limit@swarm"
traefik.http.middlewares.basic-auth.basicauth.usersFile: "/etc/traefik/secrets/credentials"
traefik.http.middlewares.rate-limit.ratelimit.average: "100"
traefik.http.middlewares.rate-limit.ratelimit.burst: "50"Nota: Use
@swarmquando o middleware é definido via labels do serviço Traefik. Use@filequando está definido em um arquivo YAML (dinâmico).
# Antes de fazer mudanças, guarde backup
cp config/traefik-swarm.yaml config/traefik-swarm.yaml.backup
cp config/dynamic.yaml config/dynamic.yaml.backup
# Edite a configuração
vim config/traefik-swarm.yaml
# Atualize no Swarm
make swarm-update-configs
# Se algo quebrou, restaure
cp config/traefik-swarm.yaml.backup config/traefik-swarm.yaml
make swarm-update-configs# Use Docker Compose para testar mudanças
make compose-up
# Depois, migre para Swarm
make swarm-create-secrets
make swarm-create-configs
make swarm-deploy# Quando renew um certificado
# 1. Substitua o arquivo em certs/
# 2. Atualize o secret
make swarm-update-secrets
# 3. Redeploy
make swarm-deploy# Configurar alertas para:
# - Certificados próximos de expirar
# - Taxa de erro > 1%
# - Latência > 500ms
# Ver métricas Prometheus
# https://traefik.seudominio.com.br/metrics
# Integrar com seu stack de monitoramento
# - Prometheus
# - Grafana
# - AlertManager# ✅ Fazer
# - Usar make swarm-create-secrets para criar secrets
# - Usar make swarm-check-secrets para verificar
# ❌ NÃO fazer
# - Commitar .env ou config/credentials no Git
# - Usar senhas fracas no dashboard
# - Armazenar chaves privadas em volumes públicos
# - Executar Traefik em modo debug em produção# Não há forma nativa de backup de secrets no Swarm
# SEMPRE mantenha cópias seguras em local externo:
# - Certificados em vault/backup seguro
# - Senhas em password manager
# - Configurações versionadas no GitCausa: Rede incorreta ou labels não aplicadas corretamente.
Solução:
- Verifique se o serviço está Traefik
na mesma rede do2. Confirme que
traefik.enable=trueestá setado - Verifique os logs:
make compose-logsoumake swarm-logs
Causa: Credenciais incorretas ou arquivo de credenciais não encontrado.
Solução:
- Verifique se o arquivo
config/credentialsexiste - Teste as credenciais:
htpasswd -bv config/credentials usuario senha - Atualize as credenciais:
make update-user USERNAME=admin PASS=nova_senha - Reinicie o Traefik após modificar credenciais
Causa: Certificado não está no formato correto ou caminho incorreto.
Solução:
- Verifique o formato PEM
- Confirme o caminho no
dynamic.yaml - Verifique se o certificado inclui a chain completa
Causa: Rede overlay não configurada corretamente.
Solução:
- Confirme que a rede existe:
docker network ls - Verifique se o serviço está na rede
swarm-net - Use
make swarm-logspara ver erros
Causa: Conflito de subnet entre redes Docker.
Solução:
# Remova a rede e recrie com subnet diferente
docker stack rm traefik
docker network rm swarm-net
docker network create --driver overlay --attachable --subnet=10.10.0.0/24 swarm-net
make swarm-deployCausa: Limites muito baixos para sua aplicação.
Solução:
Ajuste em config/dynamic.yaml:
middlewares:
rate-limit:
rateLimit:
average: 1000 # Aumente se necessário
burst: 200MIT License - See LICENSE file for details.