Sobre o Traefik
O Traefik é um proxy reverso muito versatil e pode ser utilizado em Docker, Kubernetes ou usando seu proprio binario.
Neste tutorial vamos abordar a instalação do Traefik no Docker Standalone e vamos abordar também alguns recursos como
- Gerar certificados SSL usando DNS01
- Adicionar routers, services e middlewares de forma dinamica por meio de uma pasta do traefik
- Criar labels personalizadas no traefik
- Configuração estatica do Traefik
- Configuração dinamica do Traefik
Instalação
Clone o repositorio
git clone https://github.com/luizdores/traefik-swarm.git -b standalone
Crie a rede para o Traefik
docker network create --attachable traefik-public
Troque o token da API da Cloudflare no docker-compose.yml
environment:
# Cloudflare API token
- CF_DNS_API_TOKEN=APIKEY
Gere o Basic Auth User for Traefik
echo $(htpasswd -nb MYUSER MYPASSWD) | sed -e s/\\$/\\$\\$/g
Copie o resultado para o docker-compose.yml
labels:
...
# Middleware Basic Auth / Middleware de Basic Auth
- "traefik.http.middlewares.admin-auth.basicauth.users=MYUSER:$$apr1$$yjuBx8Nd$$4fRCCxbgB2MQwqaYgPx7L."
Troque o email de notificações do Let’s Encrypt no config/config.yaml
certificatesResolvers:
le:
acme:
email: mail@domain.com
storage: /certificates/acme.json
# Production
caServer: "https://acme-v02.api.letsencrypt.org/directory"
# Staging
#caServer: "https://acme-staging-v02.api.letsencrypt.org/directory"
Suba o traefik
docker compose up -d
Criando Dynamic Config Files
As Dynamic Config Files permitem que sejam adicionadas entradas no traefik de forma dinamica sem precisar reiniciar ele ou subir containers, assim é possivel expor outros serviços que não estejam rodando no host em que o Traefik está
Os arquivos devem ser colocados na pasta config/dynamic com a extensão .yaml
A seguir um exemplo de um site simples com http e https
http:
routers:
mysite-http:
entryPoints:
- http
rule: Host(`mysite.com`) || Host(`www.mysite.com`)
middlewares:
- https-redirect@docker
service: portal
mysite-https:
entryPoints:
- https
rule: Host(`mysite.com`) || Host(`www.mysite.com`)
tls:
certResolver: le
service: mysite
services:
portal:
loadBalancer:
servers:
- url: 'http://192.168.1.10'
passHostHeader: true
Outros exemplos poderão ser encontrados na pasta examples do repositorio
Observações
Caso tenha mais de uma placa de rede em seu servidor é possivel selecionar qual será utilizada pelo Traefik no arquivo docker-compose.yml
ports:
- target: 80
published: 80
mode: host
host_ip: IP da placa de rede