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.
A estabilidade de um sistema começa no seu design. O fluxo de tráfego foi pensado para ser simples e seguro:
INTERNET ───> [Portas 80, 443] ───> TRAEFIK CONTAINER ───> REDE 'web' (Externa) ───> SERVIÇO-ALVO (Container)
(HTTPS) (TLS Termination)
│
└──> API/Dashboard (Protegido por Basic Auth)
Princípios Fundamentais:
- Rede Externa Compartilhada: O Traefik opera conectado a uma rede Docker externa (
webpor padrão). Isso o desacopla dos seus serviços. Ele não precisa estar no mesmodocker-compose.yamlque suas aplicações para gerenciá-las, o que é fundamental para a segregação de responsabilidades. - Descoberta de Serviços via Docker Socket: O proxy monitora o socket do Docker (
/var/run/docker.sock) em modo somente leitura. Isso permite que ele detecte novos contêineres e configure rotas dinamicamente com base em labels, automatizando o processo de exposição de serviços. - Segurança por Padrão (
Opt-In): A configuraçãoexposedByDefault: falsenotraefik.yamlé intencional. Nenhum serviço é exposto à internet por acidente. Você deve explicitamente adicionar a labeltraefik.enable=truea um contêiner para que o Traefik passe a gerenciá-lo. A segurança deve ser deliberada, não acidental. - Configuração em Camadas:
traefik.yaml: Configuração estática. Define os pontos de entrada (entrypoints) e os provedores (providers). Isso raramente muda.dynamic.yaml: Configuração dinâmica. Usada para elementos que mudam com mais frequência, como middlewares de autenticação.- Labels do Docker: A configuração mais dinâmica, aplicada diretamente nos seus contêineres de aplicação.
Antes de colocar a mão na massa, garanta que o sistema tenha o básico:
- Docker Engine e Docker Compose
- Um shell compatível com
bash(Linux, macOS ou WSL2/Git Bash no Windows). htpasswd: OMakefileusa este utilitário (parte doapache2-utilsno Debian/Ubuntu) para gerar o hash da senha do dashboard.
O processo é automatizado para minimizar erros. Siga os passos na ordem correta.
git clone https://github.com/RafaelQSantos-RQS/traefik
cd traefikO Makefile cuida de toda a preparação. Execute o comando:
make setupO que este comando faz?
- Cria o arquivo de ambiente: Se o arquivo
.envnão existir, ele será copiado a partir do template (.env.template). - Configura o Host do Dashboard: Ele detecta o hostname da máquina local e o pré-configura no arquivo
.envpara facilitar o acesso ao dashboard. - PARA e EXIGE AÇÃO: A primeira execução irá parar e pedir para você editar o arquivo
.env. Isto é um passo de segurança crucial.
Abra o arquivo .env e configure todas as variáveis para o seu ambiente. Preste atenção especial em:
TRAEFIK_VERSION: Fixe uma versão estável (ex:v3.0). Não uselatestem produção.DOMAIN: O seu domínio principal.DASH_USEReDASH_PASS: As credenciais que você usará para acessar o dashboard do Traefik.
Após editar o .env, rode o comando de setup novamente:
make setupO que ele faz agora?
- Cria a estrutura de configuração: Garante que o diretório
./configexista. - Gera as Configurações: Cria os arquivos
traefik.yamledynamic.yamlna pasta./configa partir dos templates. - Protege o Dashboard: Ele lê
DASH_USEReDASH_PASSdo seu.env, gera um hash seguro (bcrypt) para a senha e injeta as credenciais nodynamic.yaml.
Seu ambiente está configurado.
Com tudo pronto, suba o contêiner:
make upO Traefik estará rodando e pronto para rotear o tráfego para seus outros contêineres na rede web.
Toda a interação é feita via Makefile. Use make help para ver a lista completa de comandos. Os essenciais são:
# Sobe os contêineres em background
make up
# Para e remove os contêineres
make down
# Reinicia a stack (down + up)
make restart
# Acompanha os logs em tempo real para diagnóstico
make logs
# Verifica o status dos contêineres
make status
# Baixa as imagens mais recentes definidas no .env
make pull
# Sincroniza com o repositório remoto (forcadamente)
make syncEntender a estrutura dos arquivos é entender como o sistema funciona:
Makefile: O coração da automação. Centraliza todas as operações, garantindo consistência.docker-compose.yaml: Define o serviço do Traefik, suas redes, volumes, portas e as labels para sua própria exposição (dashboard/métricas)..env.template: O esqueleto das variáveis de ambiente. Nunca armazene segredos aqui..env: Arquivo local (ignorado pelo Git) que contém as configurações e segredos do seu ambiente.templates/: Contém os modelos base para os arquivos de configuração do Traefik.traefik.yaml.template: Configuração estática.dynamic.yaml.template: Configuração dinâmica.
config/: Diretório (ignorado pelo Git) onde os arquivos de configuração finais, gerados pelomake setup, são armazenados.certs/: Diretório (ignorado pelo Git) destinado ao armazenamento de certificados SSL/TLS manuais. Cada certificado deve ter seu próprio subdiretório. A configuração para carregar esses certificados deve ser adicionada manualmente aodynamic.yamlou via labels do Docker.