O que é o Traefik
O Traefik e um proxy reverso e load balancer moderno projetado especificamente para ambientes de containers e microsservicos. Ao contrario do NGINX e do HAProxy, o Traefik foi construido do zero para se integrar automaticamente com orquestradores como Docker, Kubernetes, Cônsul e outros - sem precisar reiniciar ou reeditar arquivos de configuração toda vez que um serviço novo sobe.
Ele foi criado pela empresa francesa Containous (hoje Traefik Labs) e lançado em 2016 como projeto open source. Hoje o repositório no GitHub tem mais de 50 mil estrelas e o Traefik e usado em produção por milhares de empresas ao redor do mundo, de startups a grandes corporações.
O problema que o Traefik resolve e clássico em ambientes de containers: toda vez que você sobe um novo container ou servi, precisa atualizar a configuração do proxy reverso para rotear o tráfego corretamente. Em ambientes dinâmicos com dezenas ou centenas de serviços subindo e descendo, isso se torna inviável manualmente. O Traefik descobre e configura as rotas automaticamente através de labels ou anotações.
Como o Traefik funciona
A arquitetura do Traefik e organizada em três conceitos principais: providers, routers e services. Os providers são as fontes de configuração - Docker, Kubernetes, arquivos estáticos, etc. Os routers definem as regras de roteamento (qual domínio ou path vai para qual serviço). Os services definem como o tráfego e distribuído entre as instâncias.
Quando você sobe um container Docker com a label traefik.http.routers.meuapp.rule=Host('meuapp.example.com'), o Traefik detecta automaticamente via API do Docker daemon e cria o router correspondente em tempo real, sem nenhum arquivo de configuração adicional. Quando o container para, o router e removido automaticamente.
O Traefik também tem suporte nativo a SSL automático via Let's Encrypt. Você configura um resolver ACME uma vez e o Traefik passa a emitir e renovar certificados automaticamente para cada domínio que aparece nas labels dos containers. Não e necessário gerenciar certificados manualmente nem usar Certbot separado.
O Traefik expõe um dashboard web na porta 8080 por padrão. Em produção, sempre proteja esse dashboard com autenticação básica ou desative-o completamente para não expor informações da sua infraestrutura.
Principais recursos
O Traefik tem um conjunto de recursos que o tornam muito atraente para quem trabalha com containers:
- Service Discovery automático: detecta novos serviços em tempo real via Docker, Kubernetes, Cônsul, ECS e outros providers. Sem necessidade de reiniciar o proxy.
- SSL automático: integra com Let's Encrypt para emitir, renovar e gerenciar certificados TLS automaticamente por domínio.
- Load balancing: suporte a round-robin, weighted round-robin e sticky sessions.
- Middlewares: componentes plugaveis para adicionar autenticação, rate limiting, redirecionamentos, cabeçalhos HTTP e compressão nas rotas.
- Métricas e observabilidade: exporta métricas para Prometheus, Datadog e outros. Suporte nativo a tracing com OpenTelemetry.
- TCP e UDP: além de HTTP/HTTPS, o Traefik roteia tráfego TCP e UDP, útil para bancos de dados e outros protocolos.
Como começar: instalação com Docker Compose
A forma mais rápida de subir o Traefik e via Docker Compose. Veja um exemplo básico:
version: '3'
services:
traefik:
image: traefik:v3.1
command:
- '--api.insecure=true'
- '--providers.Docker=true'
- '--providers.Docker.exposedbydefault=false'
- '--entrypoints.web.address=:80'
ports:
- '80:80'
- '8080:8080'
volumes:
- '/var/run/Docker.sock:/var/run/Docker.sock:ro'
meuapp:
image: nginx
labels:
- 'traefik.enable=true'
- 'traefik.http.routers.meuapp.rule=Host("meuapp.localhost")'
- 'traefik.http.routers.meuapp.entrypoints=web'Neste exemplo, o Traefik sobe na porta 80 e monitora o Docker daemon. O container meuapp fica acessível em meuapp.localhost automaticamente via as labels. Qualquer novo container com traefik.enable=true e as labels corretas será roteado automaticamente.
Para adicionar SSL em produção, inclua o resolver Let's Encrypt nas opcoes do Traefik e adicione as labels de TLS nos containers:
command:
- '[email protected]'
- '--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json'
- '--certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web'
# No container do app:
labels:
- 'traefik.http.routers.meuapp.tls=true'
- 'traefik.http.routers.meuapp.tls.certresolver=letsencrypt'O arquivo acme.json que armazena os certificados Let's Encrypt deve ter permissão 600. O Traefik não inicia se as permissões estiverem erradas. Rode chmod 600 acme.json antes de subir o serviço.
Exemplo prático: roteando múltiplos serviços
Imagine que você tem uma aplicação com um frontend React, uma API Node.js e um serviço de autenticação. Com o Traefik, você roteia tudo pelo mesmo IP e porta 443 usando apenas labels no Docker-compose.yml:
frontend:
image: meu-frontend
labels:
- 'traefik.enable=true'
- 'traefik.http.routers.frontend.rule=Host("app.example.com")'
- 'traefik.http.routers.frontend.tls.certresolver=letsencrypt'
api:
image: meu-backend
labels:
- 'traefik.enable=true'
- 'traefik.http.routers.api.rule=Host("app.example.com") && PathPrefix("/api")'
- 'traefik.http.routers.api.tls.certresolver=letsencrypt'
auth:
image: meu-auth
labels:
- 'traefik.enable=true'
- 'traefik.http.routers.auth.rule=Host("auth.example.com")'
- 'traefik.http.routers.auth.tls.certresolver=letsencrypt'O Traefik cuida do roteamento, SSL e renovação de certificados para os três serviços automaticamente. Se você escalar a API para 3 replicas com Docker-compose scale api=3, o Traefik vai distribuir o tráfego entre as três instâncias via round-robin sem nenhuma configuração adicional.
Comparação com alternativas
O Traefik compete principalmente com NGINX Proxy Manager, HAProxy e Caddy. Cada um tem seus pontos fortes:
- NGINX: extremamente performatico e flexível, mas configuração manual e estática. Exige reload a cada mudança. Não tem service discovery nativo. Melhor para ambientes estáticos ou quando você precisa de controle total sobre a configuração.
- Caddy: também tem SSL automático e configuração simples, mas com menos integração com Docker e Kubernetes comparado ao Traefik. Bom para sites e APIs simples.
- HAProxy: altíssima performance para load balancing, mas configuração complexa e sem service discovery automático. Melhor para ambientes de alto volume com requisitos específicos de balanceamento.
O Traefik vence claramente em ambientes dinâmicos de containers. Se o seu ambiente muda com frequência (escalonamento automático, deploys contínuos, múltiplos serviços), o Traefik economiza horas de trabalho de configuração manual.
Pontos positivos e limitações
Os pontos fortes do Traefik são evidentes: service discovery automático, SSL sem frição, dashboard visual e uma curva de aprendizado razoavelmente baixa para quem já trabalha com Docker. A documentação oficial e completa e bem mantida.
Nas limitações: o Traefik pode ser mais complexo de depurar quando algo não funciona. As rotas são definidas distribuídas nas labels dos containers, o que pode dificultar ter uma visão centralizada de toda a configuração em sistemas grandes. O dashboard ajuda, mas não substitui uma documentação centralizada das rotas.
Outro ponto: alguns recursos avançados como circuit breaker, sticky sessions por cookie e autenticação OAuth estão disponíveis apenas no Traefik Enterprise, a versão paga. A versão community cobre 95% dos casos de uso, mas e bom saber quais limites existem antes de escolher a ferramenta.
Nunca monte o socket Docker (/var/run/Docker.sock) com permissão de escrita em produção. Use a opcao :ro (read-only) para que o Traefik apenas leia o estado dos containers sem poder criar ou deletar serviços.
Casos de uso reais
O Traefik brilha em contextos específicos. Veja quem se beneficia mais:
- Dev rodando múltiplos projetos localmente: sobe vários projetos em portas diferentes e o Traefik roteia por subdomínio (projeto1.localhost, projeto2.localhost) sem conflito de porta.
- Startup com deploy continuo: a cada deploy, novos containers sobem e o Traefik detecta automaticamente sem precisar de intervenção manual ou restart do proxy.
- Time usando Kubernetes: o Traefik funciona como Ingress Controller no Kubernetes, substituindo o nginx-ingress com configuração via anotações nos recursos Ingress.
- Dev solo com VPS: um VPS com Docker + Traefik consegue hospedar dezenas de aplicações pequenas com SSL automático em cada uma, gastando apenas o custo do VPS.
Dicas e boas práticas
Use a rede Docker dedicada para o Traefik e adicione seus containers a ela. Isso isola o tráfego roteado e evita que o Traefik tente rotear containers que não deveriam ser expostos.
Habilite o log de acesso (--accesslog=true) durante a fase de configuração para depurar problemas de roteamento. Cada requisição aparece com o router que foi acionado, o que facilita muito o diagnóstico.
Para ambientes com muitos serviços, use arquivos de configuração dinâmica (providers.file) para definir middlewares reutilizáveis como autenticação básica ou rate limiting. Assim você aplica o mesmo middleware em vários routers referenciando apenas o nome, sem duplicar a configuração.
Vale a pena?
Se você trabalha com Docker ou Kubernetes, o Traefik e uma das melhores ferramentas que você pode adicionar ao seu toolkit. A redução de trabalho manual de configuração de proxy e certificados SSL e significativa, especialmente em ambientes com vários serviços ou com deploys frequentes.
Para quem esta começando com containers e quer uma forma simples de expor vários serviços com HTTPS, o Traefik e muito mais acessível do que configurar NGINX manualmente. A curva inicial e pequena e os resultados aparecem rápido.
O próximo passo e direto: adicione o Traefik ao seu Docker-compose.yml atual e converta as configurações de porta de cada serviço para labels. Em menos de uma hora você vai ter todos os seus serviços roteados automaticamente com SSL funcionando.
Comentários