O cadeado verde na barra de endereços, garantido pelo protocolo HTTPS, é um símbolo universal de confiança e segurança para os usuários. No entanto, para equipes de DevOps e infraestrutura, o gerenciamento de certificados SSL/TLS — sua compra, configuração, instalação e, principalmente, renovação — sempre foi um processo manual, repetitivo e propenso a erros. Um certificado expirado pode tirar um serviço do ar e causar prejuízos significativos. É para resolver essa dor de cabeça que a combinação poderosa de Traefik e Let’s Encrypt se tornou a solução padrão para automação de HTTPS em ambientes nativos da nuvem.
Vamos demonstrar, passo a passo, como configurar o Traefik como um proxy reverso inteligente que não apenas roteia o tráfego para seus contêineres, mas também provisiona e renova automaticamente certificados SSL gratuitos da Let’s Encrypt. Ao final deste artigo, você será capaz de implementar uma solução “configure e esqueça” para ter HTTPS em todas as suas aplicações, de forma robusta e escalável.
O que é Traefik? O Proxy Reverso Nativo da Nuvem
Traefik é um moderno proxy reverso e balanceador de carga projetado especificamente para o ecossistema de microsserviços e contêineres. Diferente de proxies tradicionais como Nginx ou Apache, que dependem de arquivos de configuração estáticos que precisam ser atualizados e recarregados a cada mudança, o Traefik é dinâmico.
Sua principal característica é a descoberta automática de serviços. O Traefik se conecta diretamente às APIs de orquestradores como Docker, Kubernetes, Swarm ou Consul e detecta automaticamente quando novos serviços (contêineres) são iniciados ou parados. Com base em metadados (labels no Docker ou annotations no Kubernetes) anexados a esses serviços, o Traefik cria e atualiza suas próprias regras de roteamento em tempo real, sem a necessidade de intervenção manual ou reinicializações. Isso o torna a ferramenta perfeita para ambientes efêmeros e altamente dinâmicos.
O que é Let’s Encrypt? Democratizando o HTTPS
Let’s Encrypt é uma Autoridade Certificadora (CA) gratuita, automatizada e aberta, mantida pela Internet Security Research Group (ISRG). Sua missão é tornar a criptografia TLS (a tecnologia por trás do HTTPS) onipresente na internet, eliminando as barreiras de custo e complexidade técnica.
Para fazer isso, a Let’s Encrypt utiliza o protocolo ACME (Automated Certificate Management Environment). Esse protocolo permite que um software cliente, rodando em seu servidor, prove para a Let’s Encrypt que ele controla um determinado domínio. Uma vez provado, o cliente pode solicitar, renovar e revogar certificados para esse domínio de forma totalmente automatizada.
A Sinergia Perfeita: Como Traefik e Let’s Encrypt Trabalham Juntos
A integração nativa com a Let’s Encrypt é uma das funcionalidades mais aclamadas do Traefik. O fluxo de trabalho é elegantemente simples e totalmente automatizado:
- Detecção: Você inicia um novo contêiner de aplicação com um label especificando o domínio que ele deve responder (ex:
app.nerdexpert.com.br). - Solicitação: O Traefik detecta este novo serviço e percebe que ele precisa de um certificado SSL. Ele então inicia o processo ACME com a Let’s Encrypt, solicitando um certificado para
app.nerdexpert.com.br. - Desafio (Challenge): A Let’s Encrypt responde com um desafio para provar que o Traefik realmente controla o domínio. O método mais comum é o HTTP-01, onde a Let’s Encrypt pede ao Traefik para hospedar um arquivo com um conteúdo específico em um URL específico dentro do domínio.
- Resolução: O Traefik, sendo o proxy que controla o tráfego para o domínio, cria temporariamente o endpoint necessário para responder ao desafio da Let’s Encrypt.
- Validação e Emissão: A Let’s Encrypt verifica o endpoint, confirma a propriedade do domínio e emite o certificado SSL.
- Armazenamento e Renovação: O Traefik recebe o certificado, o armazena (geralmente em um arquivo JSON ou em um key-value store) e começa a usá-lo para servir tráfego HTTPS para sua aplicação. O Traefik também monitora a data de validade do certificado e repete esse processo automaticamente para renová-lo antes que expire.
Implementação Prática: Configurando Traefik com Docker Compose
Vamos ao que interessa: a configuração. Usaremos o Docker Compose para orquestrar nosso contêiner Traefik e, posteriormente, nossas aplicações.
Pré-requisitos Essenciais
- Um servidor Linux (VPS ou dedicado) com um endereço IP público.
- Docker e Docker Compose instalados.
- Um nome de domínio (ex:
nerdexpert.com.br) que você controla. - Registros DNS do tipo A apontando para o IP do seu servidor. Você precisará de um para o Traefik (ex:
traefik.nerdexpert.com.br) e para cada aplicação que for implantar (ex:app.nerdexpert.com.br).
Passo 1: Estrutura de Diretórios e Arquivos
Vamos criar uma estrutura organizada para nossa configuração do Traefik.
mkdir traefik-proxy
cd traefik-proxy
touch docker-compose.yml
touch traefik.yml
touch acme.json
chmod 600 acme.json
Importante: O arquivo acme.json armazenará seus certificados e chaves privadas. A permissão 600 é crucial para garantir que apenas o proprietário (o usuário root dentro do contêiner Traefik) possa ler e escrever nele.
Passo 2: Configuração Estática do Traefik (traefik.yml)
Este arquivo contém as configurações de inicialização do Traefik, como os pontos de entrada (entrypoints), a conexão com a API do Docker e a configuração do resolvedor de certificados da Let’s Encrypt.
Edite o arquivo traefik.yml:
# traefik.yml
# Configurações globais
global:
checkNewVersion: true
sendAnonymousUsage: false
# Pontos de entrada para o tráfego
entryPoints:
web:
address: ":80"
# Middleware para redirecionar todo o tráfego HTTP para HTTPS
http:
redirections:
entryPoint:
to: websecure
scheme: https
websecure:
address: ":443"
# Provedores de configuração (onde o Traefik busca por serviços)
providers:
docker:
endpoint: "unix:///var/run/docker.sock"
exposedByDefault: false # Boa prática: expor apenas contêineres com label explícito
# API e Dashboard do Traefik (inseguro por padrão, vamos proteger depois)
api:
dashboard: true
insecure: true # Apenas para setup inicial. NÃO USE EM PRODUÇÃO SEM AUTENTICAÇÃO.
# Resolvedor de certificados Let's Encrypt
certificatesResolvers:
letsencrypt:
acme:
email: "[email protected]"
storage: "/letsencrypt/acme.json"
# Usando o desafio HTTP-01
httpChallenge:
entryPoint: web
# Log
log:
level: INFO # Mude para DEBUG para mais detalhes durante o troubleshooting
Substitua [email protected] por um e-mail válido. A Let’s Encrypt o usará para enviar notificações sobre a expiração de certificados.
Passo 3: Orquestração do Traefik com docker-compose.yml
Agora, vamos definir o serviço Traefik em nosso arquivo docker-compose.yml.
# docker-compose.yml
version: '3.8'
services:
traefik:
image: "traefik:v2.11" # Use uma versão específica para evitar surpresas
container_name: "traefik"
restart: unless-stopped
security_opt:
- no-new-privileges:true
ports:
# Porta HTTP para o desafio ACME e redirecionamento
- "80:80"
# Porta HTTPS para o tráfego seguro
- "443:443"
volumes:
# Monta o socket do Docker para que o Traefik possa detectar contêineres
- "/var/run/docker.sock:/var/run/docker.sock:ro"
# Monta o arquivo de configuração estática
- "./traefik.yml:/etc/traefik/traefik.yml:ro"
# Monta o arquivo que armazenará os certificados
- "./acme.json:/letsencrypt/acme.json"
networks:
- webproxy
labels:
# Habilita o Traefik para gerenciar a si mesmo
- "traefik.enable=true"
# Roteador para o Dashboard do Traefik via HTTPS
- "traefik.http.routers.traefik-dashboard.rule=Host(`traefik.nerdexpert.com.br`)"
- "traefik.http.routers.traefik-dashboard.entrypoints=websecure"
- "traefik.http.routers.traefik-dashboard.service=api@internal"
# Usa o resolvedor de certificados que definimos no traefik.yml
- "traefik.http.routers.traefik-dashboard.tls.certresolver=letsencrypt"
# Adicionaremos um middleware de autenticação aqui posteriormente
# Rede para que o Traefik possa se comunicar com outros contêineres
networks:
webproxy:
name: webproxy
Certifique-se de que o domínio no label Host é traefik.nerdexpert.com.br.
Passo 4: Iniciando o Traefik e Verificando a Configuração
Com os arquivos prontos, inicie o Traefik:
docker-compose up -d
Acompanhe os logs para ver a mágica acontecer:
docker-compose logs -f
Você deverá ver logs indicando que o Traefik está se comunicando com a Let’s Encrypt para obter um certificado para o seu dashboard. Após alguns segundos, acesse https://traefik.nerdexpert.com.br. Você deverá ver o dashboard do Traefik carregado com um certificado SSL válido!
Passo 5: Implantando uma Aplicação com HTTPS Automático
Agora, o teste final. Vamos implantar um serviço de exemplo, o whoami, que simplesmente exibe informações sobre a requisição HTTP.
Crie um novo diretório para sua aplicação (fora do diretório do Traefik) e crie um docker-compose.yml dentro dele:
# /home/user/minha-app/docker-compose.yml
version: '3.8'
services:
whoami:
image: "traefik/whoami"
container_name: "whoami-app"
restart: unless-stopped
networks:
- webproxy # Conecta à mesma rede do Traefik
labels:
- "traefik.enable=true"
# Define o domínio para esta aplicação
- "traefik.http.routers.whoami.rule=Host(`app.nerdexpert.com.br`)"
# Direciona o tráfego para a porta 80 do contêiner
- "traefik.http.services.whoami.loadbalancer.server.port=80"
# Usa o ponto de entrada HTTPS
- "traefik.http.routers.whoami.entrypoints=websecure"
# Especifica o resolvedor de certificados
- "traefik.http.routers.whoami.tls.certresolver=letsencrypt"
networks:
webproxy:
external: true # Usa a rede criada pelo docker-compose do Traefik
Substitua app.nerdexpert.com.br pelo domínio da sua aplicação (lembre-se de que o DNS já deve estar apontado).
Inicie a aplicação:
docker-compose up -d
Observe os logs do Traefik novamente. Você verá um novo processo de solicitação de certificado para app.nerdexpert.com.br. Em instantes, você poderá acessar https://app.nerdexpert.com.br e ver a página do whoami servida com um cadeado verde. Tudo isso sem tocar em um único arquivo de configuração do Traefik!
Tópicos Avançados e Boas Práticas para Produção
Ambiente de Staging vs. Produção da Let’s Encrypt
A Let’s Encrypt possui limites de taxa rígidos para evitar abusos. Ao testar suas configurações, você pode facilmente atingir esses limites. Para evitar isso, use o ambiente de “staging” da Let’s Encrypt, que não tem limites tão restritos. Para isso, adicione a linha caServer no seu traefik.yml:
certificatesResolvers:
letsencrypt:
acme:
# ...
caServer: "https://acme-staging-v02.api.letsencrypt.org/directory"
# ...
Os certificados de staging não são confiáveis pelos navegadores (você receberá um aviso de segurança), mas são perfeitos para validar que o fluxo ACME está funcionando. Lembre-se de remover ou comentar esta linha quando for para produção.
Desafio DNS-01 para Certificados Wildcard
O desafio HTTP-01 não suporta certificados wildcard (ex: *.nerdexpert.com.br). Para isso, você precisa usar o desafio DNS-01. Neste método, em vez de hospedar um arquivo, o Traefik precisa criar um registro TXT no seu provedor de DNS via API. O Traefik suporta dezenas de provedores de DNS (Cloudflare, DigitalOcean, AWS Route 53, etc.). A configuração é mais complexa, pois exige o fornecimento de credenciais de API ao Traefik, mas oferece maior flexibilidade.
Segurança do Dashboard
Nunca exponha o dashboard do Traefik sem autenticação em produção. A forma mais simples de protegê-lo é com um middleware de autenticação básica (Basic Auth). Primeiro, gere um usuário e senha com hash:
echo $(htpasswd -nb usuario senha) | sed -e s/\\$/\\$\\$/g
Copie a saída (ex: usuario:$$apr1$$...). Agora, adicione o middleware aos labels do Traefik no docker-compose.yml:
labels:
# ... (outros labels)
# Middleware de autenticação
- "traefik.http.middlewares.auth.basicauth.users=usuario:$$apr1$$..."
# Aplica o middleware ao roteador do dashboard
- "traefik.http.routers.traefik-dashboard.middlewares=auth"
Reinicie o Traefik, e agora seu dashboard solicitará um nome de usuário e senha.
A automação do ciclo de vida de certificados SSL é um dos maiores ganhos de produtividade e confiabilidade que uma equipe de infraestrutura pode alcançar. A combinação de Traefik e Let’s Encrypt transforma uma tarefa manual e estressante em um processo totalmente automatizado e transparente. Ao adotar essa abordagem, você não apenas fortalece a segurança de suas aplicações com HTTPS, mas também libera sua equipe para focar em tarefas que agregam mais valor ao negócio. A configuração inicial pode exigir atenção aos detalhes, mas o retorno sobre o investimento em termos de tempo economizado e tranquilidade é imensurável, consolidando-se como uma prática indispensável para qualquer ambiente moderno baseado em contêineres em 2025.
Sou um profissional na área de Tecnologia da informação, especializado em monitoramento de ambientes, Sysadmin e na cultura DevOps. Possuo certificações de Segurança, AWS e Zabbix.




