3 - Traefik
Compose do Traefik
Arquivo docker-compose.yml do Traefik
mkdir -p /srv/docker/core/traefik/dynamic /srv/docker/shared/certs
tee /srv/docker/core/traefik/docker-compose.yml > /dev/null <<'EOF'
version: "3.8"
services:
traefik:
image: traefik:v2.11
command:
- "--providers.docker=true"
- "--providers.docker.swarmMode=true"
- "--providers.docker.exposedbydefault=false"
- "--providers.file.directory=/dynamic"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "--log.level=INFO"
- "--api.dashboard=true"
- "--api.insecure=true"
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- traefik_dynamic:/dynamic:ro
- traefik_certs:/certs:ro
configs:
- source: traefik_yml
target: /traefik.yml
mode: 0444
deploy:
placement:
constraints: [node.role == manager]
networks:
- traefik
networks:
traefik:
external: true
volumes:
traefik_dynamic:
driver: local
driver_opts:
type: none
o: bind
device: /srv/docker/core/traefik/dynamic
traefik_certs:
driver: local
driver_opts:
type: none
o: bind
device: /srv/docker/shared/certs
configs:
traefik_yml:
file: ./traefik.yml
EOFEsse docker-compose.yml define o serviço Traefik rodando em modo Swarm. Ele se conecta ao Docker, lê configurações dinâmicas da pasta dynamic/, expõe as portas 80 e 443, e monta os volumes necessários — incluindo os certificados localizados em /srv/docker/shared/certs. A rede traefik é externa e precisa ser criada manualmente antes do deploy.
Arquivo traefik.yml – Configuração estática
tee /srv/docker/core/traefik/traefik.yml > /dev/null <<'EOF'
api:
dashboard: true
entryPoints:
web:
address: ":80"
websecure:
address: ":443"
providers:
docker:
swarmMode: true
exposedByDefault: false
file:
directory: /dynamic
watch: true
EOFEste é o arquivo de configuração estática do Traefik. Define dois pontos de entrada (web e websecure), habilita o painel de controle e ativa dois providers: Docker (modo Swarm) e arquivos (/dynamic), que serão usados para a configuração TLS com certificados autoassinados.
Arquivo tls.yml – Certificado TLS estático
tee /srv/docker/core/traefik/dynamic/tls.yml > /dev/null <<'EOF'
tls:
certificates:
- certFile: /certs/wsl.lab.local.crt
keyFile: /certs/wsl.lab.local.key
stores:
default:
defaultCertificate:
certFile: /certs/wsl.lab.local.crt
keyFile: /certs/wsl.lab.local.key
EOFEste arquivo é lido dinamicamente pelo Traefik para aplicar certificados TLS. Ele aponta para os arquivos .crt e .key armazenados em /srv/docker/shared/certs. Essa abordagem permite que você utilize certificados autoassinados em ambientes locais com HTTPS funcional.
Execute o teste para validar se o Windows pinga do nome
ping wsl.lab.local Criar a rede overlay traefik
docker network create --driver=overlay traefikEsse comando só precisa ser executado uma vez. Se a rede já existir, será ignorado.
Fazer o deploy do stack Traefik
docker stack deploy -c /srv/docker/core/traefik/docker-compose.yml traefikComandos Úteis
Atualizar (redeploy) o Traefik
docker stack deploy -c /srv/docker/core/traefik/docker-compose.yml traefikOpcional: forçar recriação dos serviços se nada mudou no spec
docker service update --force traefik_traefikVerificação rápida
docker stack ps traefikLogs em tempo real (Ctrl+C para sair)
docker service logs -f traefik_traefikBackup
sudo bash -lc 'cd /srv/docker && mkdir -p .backup \
&& TS=$(date +%F_%H-%M-%S) \
&& tar -czf ".backup/traefik-${TS}.tar.gz" \
core/traefik/docker-compose.yml core/traefik/traefik.yml core/traefik/dynamic shared/certs \
&& echo "Gerado: /srv/docker/.backup/traefik-${TS}.tar.gz"'Restore — Traefik (último backup)
sudo bash -lc '
cd /srv/docker
BAK=$(ls -1t .backup/traefik-*.tar.gz | head -n1) || { echo "Nenhum backup traefik encontrado"; exit 1; }
echo ">> Restaurando: $BAK"
docker stack rm traefik >/dev/null 2>&1 || true
# espera o stack sumir
while docker stack ps traefik >/dev/null 2>&1; do sleep 1; done
tar -xzf "$BAK" -C /srv/docker
docker network create --driver overlay --attachable traefik 2>/dev/null || true
docker stack deploy -c core/traefik/docker-compose.yml traefik
'
No comments to display
No comments to display