Traefik¶
O Traefik é o proxy reverso da VPS. Ele recebe as conexões HTTP e HTTPS, identifica o domínio solicitado e encaminha a requisição para o container correto.
Também é responsável pela emissão e renovação dos certificados TLS por meio do Let's Encrypt.
Informações desta VPS¶
| Item | Valor |
|---|---|
| Stack | /opt/stacks/reverse-proxy/compose.yml |
| Container principal | reverse-proxy-traefik-1 |
| Container do dashboard | reverse-proxy-traefik-dashboard-1 |
| Rede Docker | proxy |
| Porta HTTP | 80 |
| Porta HTTPS | 443 |
| Resolvedor de certificados | le |
| Armazenamento ACME | /opt/stacks/reverse-proxy/letsencrypt/acme.json |
| Dashboard | https://dashboard.cloud.hometecseg.com |
Status¶
Ver os containers do Traefik¶
Ver somente o container principal¶
Ver a imagem configurada¶
Ver a imagem utilizada pelo container¶
Logs¶
Ver os últimos 100 registros¶
Acompanhar logs em tempo real¶
Procurar erros¶
Procurar mensagens relacionadas a certificados¶
Procurar erros do provider Docker¶
docker logs reverse-proxy-traefik-1 2>&1 | grep -Ei "provider|docker client|docker server|API version"
Operação¶
Validar o Compose¶
Subir o Traefik¶
Parar o Traefik¶
Interrupção dos serviços
Parar o Traefik deixa temporariamente indisponíveis todos os serviços publicados por domínio e HTTPS.
Iniciar o Traefik parado¶
Reiniciar a stack¶
Reiniciar somente o container principal¶
Recriar os containers¶
Atualização¶
Criar backup do Compose¶
cp /opt/stacks/reverse-proxy/compose.yml \
/opt/stacks/reverse-proxy/compose.yml.bak-$(date +%Y%m%d-%H%M%S)
Ver os backups existentes¶
Validar o Compose antes da atualização¶
Baixar a imagem configurada¶
Recriar os containers com a nova imagem¶
Verificar o status após a atualização¶
Verificar os logs após a atualização¶
Confirmar a imagem em uso¶
Rede proxy¶
Verificar se a rede existe¶
Inspecionar a rede¶
Ver os containers conectados à rede¶
docker network inspect proxy \
--format '{{range $id, $container := .Containers}}{{$container.Name}}{{println}}{{end}}'
Um serviço publicado pelo Traefik normalmente precisa:
- estar conectado à rede
proxy; - possuir
traefik.enable=true; - possuir uma regra de domínio;
- informar a porta interna correta;
- utilizar o resolvedor de certificado
le.
Exemplo de labels¶
labels:
- "traefik.enable=true"
- "traefik.docker.network=proxy"
- "traefik.http.routers.exemplo.rule=Host(`exemplo.cloud.hometecseg.com`)"
- "traefik.http.routers.exemplo.entrypoints=websecure"
- "traefik.http.routers.exemplo.tls=true"
- "traefik.http.routers.exemplo.tls.certresolver=le"
- "traefik.http.services.exemplo.loadbalancer.server.port=8000"
O nome do resolvedor precisa ser exatamente:
Não utilizar:
a menos que esse nome também esteja definido na configuração estática do Traefik.
Certificados TLS¶
Verificar o arquivo ACME¶
Verificar as permissões¶
Ajustar a permissão esperada¶
Testar o certificado de um domínio¶
Exibir emissor e validade do certificado¶
echo | openssl s_client -connect DOMINIO:443 -servername DOMINIO 2>/dev/null \
| openssl x509 -noout -issuer -subject -dates
Exemplo:
echo | openssl s_client \
-connect docs.cloud.hometecseg.com:443 \
-servername docs.cloud.hometecseg.com 2>/dev/null \
| openssl x509 -noout -issuer -subject -dates
DNS¶
Verificar a resolução de um domínio¶
Exemplo:
Verificar usando dig¶
Verificar o IP público da VPS¶
O domínio precisa apontar para o IP público da VPS antes que o Let's Encrypt consiga emitir o certificado.
Testes de acesso¶
Testar apenas os cabeçalhos HTTPS¶
Mostrar detalhes da conexão¶
Ignorar temporariamente a validação TLS¶
Uso de -k
O parâmetro -k ignora a validação do certificado. Use apenas para diagnóstico. Ele não corrige certificados inválidos.
Troubleshooting¶
Certificado autoassinado¶
Sintoma:
Verificar:
Causas comuns:
- domínio sem registro DNS;
- DNS apontando para IP incorreto;
- resolvedor com nome errado;
- Traefik sem acesso ao Docker;
- rota não carregada;
- portas 80 ou 443 bloqueadas;
- problema ao emitir o certificado ACME.
Erro de API Docker incompatível¶
Erro já encontrado nesta VPS:
Esse erro impedia o Traefik de consultar o Docker e ler as labels dos containers.
Consequências:
- novas rotas não eram carregadas;
- serviços podiam retornar erro;
- certificados novos não eram emitidos;
- o Traefik entregava o certificado interno autoassinado.
A correção aplicada foi atualizar a imagem do Traefik de:
para:
Depois da atualização:
A confirmação foi feita com:
e:
Resultado esperado:
Gateway Timeout¶
Verificar se o serviço está ativo:
Verificar se está na rede proxy:
Verificar a porta interna definida nas labels:
Verificar logs do serviço:
Erro 404 do Traefik¶
Normalmente significa que nenhuma regra de roteamento correspondeu ao domínio solicitado.
Verificar a label de domínio:
Verificar se o domínio está correto:
Verificar se o Traefik leu as labels:
Dashboard¶
Endereço:
O dashboard permite visualizar:
- routers;
- services;
- middlewares;
- entrypoints;
- erros de configuração;
- rotas carregadas dinamicamente.
O dashboard é útil para conferir se o router de determinado serviço foi criado.
Arquivos importantes¶
| Arquivo ou pasta | Função |
|---|---|
/opt/stacks/reverse-proxy/compose.yml |
Configuração da stack |
/opt/stacks/reverse-proxy/letsencrypt |
Dados do Let's Encrypt |
/opt/stacks/reverse-proxy/letsencrypt/acme.json |
Certificados e dados ACME |
/var/run/docker.sock |
Comunicação entre Traefik e Docker |
Docker Socket
O acesso ao arquivo /var/run/docker.sock concede grande poder sobre o Docker. Ele deve permanecer montado somente nos containers que realmente precisam dessa integração.