Instalando o Traefik com SSL, Dynamic Files e mais no Docker Standalone

Luiz Dores

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

Agradecimentos