Traefik com Docker Compose: reverse proxy sem dor de cabeça

Configure o Traefik com Docker Compose, ganhe roteamento por subdomínio e HTTPS automático sem gerenciar certificado manualmente.

Traefik com Docker Compose: reverse proxy sem dor de cabeça
Neste artigo
  1. O problema de expor containers sem reverse proxy
  2. O que é o Traefik e por que funciona bem com Docker
  3. Quando o Traefik com Docker Compose faz sentido
  4. Como o Traefik enxerga seus containers
  5. Subindo o Traefik com Docker Compose: primeiros passos
  6. Traefik ou Nginx: como decidir
  7. O que acontece quando você ignora o roteamento
  8. Perguntas frequentes
  9. Próximos passos depois de subir o Traefik

Se você já subiu mais de dois containers Docker no mesmo servidor e tentou acessar cada um por uma porta diferente, você sabe como isso vira bagunça rápido. Porta 3000 aqui, 8080 ali, e quando você quer HTTPS precisa gerar certificado manualmente para cada serviço. Traefik com Docker Compose resolve exatamente isso, integrado diretamente com o ecossistema Docker sem configuração manual para cada rota nova.

O problema de expor containers sem reverse proxy

Quando você sobe um stack com Docker Compose sem pensar em roteamento, a saída natural é mapear portas diretamente para o host. Funciona para começar. Não escala quando você tem quatro, cinco serviços rodando no mesmo servidor.

Você passa a precisar lembrar qual porta é de qual serviço. SSL vira um projeto separado. Qualquer mudança de domínio exige atualizar configurações em vários lugares. E expor portas diretamente no host aumenta a superfície de ataque sem necessidade.

O que é o Traefik e por que funciona bem com Docker

Traefik é um reverse proxy e load balancer feito para ambientes containerizados. A diferença principal em relação ao Nginx é que o Traefik foi projetado para descobrir serviços automaticamente, via integração com Docker, Kubernetes e outros orquestradores.

Na prática, você adiciona labels ao seu docker-compose.yml e o Traefik lê essas labels para montar as rotas. Não precisa reiniciar o Traefik quando adiciona um serviço novo. Ele detecta, configura a rota e pronto.

Outra vantagem concreta: renovação automática de certificados SSL via Let's Encrypt. Você configura uma vez e esquece. Isso por si só já vale a adoção em qualquer setup self-hosted.

Quando o Traefik com Docker Compose faz sentido

O Traefik não é para todo cenário. Faz sentido quando:

  • Você tem dois ou mais serviços rodando no mesmo servidor e quer acessar cada um por subdomínio
  • Você quer HTTPS sem gerenciar certificados manualmente
  • O ambiente é dinâmico, com containers subindo e descendo com frequência
  • Você mantém um homelab ou uma VPS com múltiplas aplicações

Não faz sentido quando:

  • Você tem apenas um serviço exposto ao público
  • Você já tem um Nginx configurado e funcionando bem para o caso de uso atual
  • O ambiente é completamente local, sem necessidade de domínio ou HTTPS real

Como o Traefik enxerga seus containers

A arquitetura do Traefik gira em torno de três conceitos: entrypoints, routers e services.

Entrypoints são as portas de entrada, geralmente 80 e 443. Routers definem as regras de roteamento, como "se o host for api.meusite.com, manda para o serviço X". Services representam o destino final, que no Docker Compose é o container apontado.

Tudo isso é configurado via labels no Compose. O Traefik lê o socket do Docker para detectar containers ativos e aplica as regras automaticamente, sem reinicialização.

Roteamento por subdomínio

Com o Traefik rodando, você consegue apontar app.meusite.com para o container da sua aplicação e monitor.meusite.com para o Grafana, por exemplo, tudo no mesmo servidor e na porta 443. O roteamento acontece pelo header Host da requisição HTTP, então o servidor nem sabe que tem múltiplos serviços por baixo.

HTTPS automático com Let's Encrypt

O Traefik tem integração nativa com o protocolo ACME, que é o que o Let's Encrypt usa para emitir e renovar certificados. Você configura o resolvedor uma vez, adiciona a label de TLS no container desejado, e o certificado é emitido e renovado automaticamente.

Um aviso importante: em ambiente de teste, use o servidor de staging do Let's Encrypt para não bater no rate limit enquanto valida a configuração. A documentação oficial do Traefik sobre ACME e Let's Encrypt cobre esse detalhe e vale ler antes de ativar em produção.

Diagrama infográfico mostrando Entrypoints, Routers e Services com setas e ícones de certificado e portas.
Fluxo conceitual: entrypoints → routers → services, com renovação de certificados.

Subindo o Traefik com Docker Compose: primeiros passos

Se você ainda não tem o básico do Compose montado, o post sobre como subir seu primeiro ambiente com Docker Compose é um bom ponto de partida antes de adicionar o Traefik por cima.

Com o docker-compose.yml configurado corretamente, o fluxo para iniciar é direto:

  • docker network create proxy
  • docker compose up -d traefik
  • docker compose up -d
  • docker compose logs -f traefik

O último comando te mostra em tempo real se o Traefik está detectando os containers e emitindo os certificados corretamente. Qualquer erro de configuração de label aparece aí antes de virar problema silencioso.

Traefik ou Nginx: como decidir

Essa pergunta aparece bastante em quem está montando o primeiro stack self-hosted. A resposta curta: se o ambiente é containerizado e dinâmico, Traefik. Se é mais estático ou você precisa de controle granular de configuração, Nginx.

O Nginx tem mais flexibilidade para casos avançados, como regras de rewrite complexas ou configurações fora do padrão. O custo é que cada serviço novo exige editar arquivos e recarregar manualmente.

O Traefik troca essa flexibilidade por automação. Pra mim, o ponto de virada é quando você passa de dois serviços no mesmo host: acima disso, o Traefik já começa a pagar o custo de aprendizado bem rápido.

O que acontece quando você ignora o roteamento

Sem reverse proxy, você termina com serviços expostos diretamente em portas do host. Isso tem custo de segurança, custo de manutenção e custo cognitivo de lembrar qual serviço vive em qual porta.

Mais cedo ou tarde você vai querer HTTPS, e o trabalho retroativo é bem maior do que teria sido configurar desde o início. Se você está gerenciando segredos e credenciais em produção, expor serviços sem TLS anula boa parte desse esforço.

Perguntas frequentes

Preciso de um domínio registrado para usar o Traefik?

Para HTTPS real com Let's Encrypt, sim. Para roteamento interno em ambiente local, você pode usar entradas no /etc/hosts ou um DNS local como Pi-hole. O Traefik funciona nos dois casos, mas o certificado automático depende de domínio público acessível.

O Traefik funciona com Docker Swarm?

Sim, e é um dos casos de uso principais da ferramenta. A integração usa o provider específico do Swarm, mas a lógica de labels é praticamente a mesma. Existem diferenças de placement e modo de deploy que valem conferir antes de testar em produção.

Dá para integrar o Traefik com Prometheus?

Sim, e é uma combinação bastante comum. O Traefik expõe métricas no formato Prometheus nativamente. Se você já tem um stack de monitoramento com Prometheus e Grafana rodando via Docker Compose, adicionar as métricas do Traefik é questão de ajustar o scrape config e criar um dashboard no Grafana.

É seguro expor o dashboard do Traefik publicamente?

Por padrão, não. O dashboard não tem autenticação habilitada. A recomendação é proteger com basicAuth via middleware ou restringir o acesso por IP. Em produção, o mais prático é não expor externamente e acessar apenas via SSH tunnel quando precisar fazer diagnóstico.

Próximos passos depois de subir o Traefik

Com o Traefik rodando e roteando por subdomínio, o próximo passo natural é adicionar middleware de autenticação para serviços internos e configurar rate limiting para as rotas expostas ao público.

Se você está usando o setup para expor stacks de IA, como um servidor de rastreamento ou de modelos, vale conferir como rastrear LLMs com Langfuse self-hosted no Docker, que usa exatamente esse tipo de configuração de rede com containers isolados e domínio próprio.

Traefik com Docker Compose é um daqueles setups que você configura uma vez e passa a depender. O esforço inicial é baixo e o retorno em manutenção reduzida e HTTPS automático compensa rápido.

Pronto para subir? Testa no ambiente local primeiro, valida o roteamento com HTTP antes de ativar o Let's Encrypt, e usa os logs como primeira linha de diagnóstico quando algo não responde como esperado.

Ficou com dúvida em alguma label específica ou em algum comportamento que não faz sentido? Deixa um comentário descrevendo o erro que apareceu nos logs. Esse tipo de problema geralmente tem causa óbvia quando você vê o output completo.

WA in X
Cláudio Campos

Escrito por

Cláudio Campos

Cláudio Campos é engenheiro de software com foco em automação e IA aplicada, baseado em Florianópolis (SC). Escreve na SyntaxLab sobre agentes de IA, Docker, automação com n8n e engenharia de software que precisa funcionar em produção — não só em demo. Aprendeu na prática, com pipelines que quebraram no deploy e agentes que alucinaram ao vivo; por isso não romantiza a tecnologia e descreve as limitações reais antes de chegar nelas.