Простая настройка Traefik docker-compose с Lets Encrypt Cloudflare DNS-01 и TLS-ALPN-01 и HTTP-01 challenges

Это моя настройка с использованием docker-compose для запуска Traefik, поддерживающая все основные провайдеры шифрования. Я рекомендую создать директорию /opt/traefik и сохранить следующий файл как /opt/traefik/docker-compose.yml. Эта конфигурация имеет провайдеры file и docker, включённые по умолчанию.

docker-compose.yml
services:
  traefik:
    image: "traefik:v3.2"
    network_mode: "host"
    command:
      - "--api.insecure=true"
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--providers.file.directory=/etc/traefik/conf"
      - "--providers.file.watch=true"
      - "--entrypoints.web.address=:80"
      - "--entryPoints.web.http.redirections.entryPoint.to=websecure"
      - "--entryPoints.web.http.redirections.entryPoint.scheme=https"
      - "--entrypoints.websecure.address=:443"
      - "--entryPoints.websecure.http3"
      - "--entryPoints.websecure.http3.advertisedport=443"
      - "--log.level=info"
      - "--serversTransport.insecureSkipVerify=true"
#
      - "--certificatesresolvers.cloudflare-ec384.acme.dnschallenge=true"
      - "--certificatesresolvers.cloudflare-ec384.acme.dnschallenge.provider=cloudflare"
      - "--certificatesresolvers.cloudflare-ec384.acme.dnschallenge.resolvers=1.1.1.1:53,1.0.0.1:53"
      - "--certificatesresolvers.cloudflare-ec384.acme.caserver=https://acme-v02.api.letsencrypt.org/directory"
      - "--certificatesresolvers.cloudflare-ec384.acme.email=letsencrypt@mydomain.com"
      - "--certificatesresolvers.cloudflare-ec384.acme.KeyType=EC384"
      - "--certificatesresolvers.cloudflare-ec384.acme.storage=/letsencrypt/acme.json"
#
      - "--certificatesresolvers.cloudflare.acme.dnschallenge=true"
      - "--certificatesresolvers.cloudflare.acme.dnschallenge.provider=cloudflare"
      - "--certificatesresolvers.cloudflare.acme.dnschallenge.resolvers=1.1.1.1:53,1.0.0.1:53"
      - "--certificatesresolvers.cloudflare.acme.caserver=https://acme-v02.api.letsencrypt.org/directory"
      - "--certificatesresolvers.cloudflare.acme.email=letsencrypt@mydomain.com"
      - "--certificatesresolvers.cloudflare.acme.KeyType=EC256"
      - "--certificatesresolvers.cloudflare.acme.storage=/letsencrypt/acme.json"
#
      - "--certificatesresolvers.cloudflare-staging.acme.dnschallenge=true"
      - "--certificatesresolvers.cloudflare-staging.acme.dnschallenge.provider=cloudflare"
      - "--certificatesresolvers.cloudflare-staging.acme.dnschallenge.resolvers=1.1.1.1:53,1.0.0.1:53"
      - "--certificatesresolvers.cloudflare-staging.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory"
      - "--certificatesresolvers.cloudflare-staging.acme.email=letsencrypt@mydomain.com"
      - "--certificatesresolvers.cloudflare-staging.acme.KeyType=EC256"
      - "--certificatesresolvers.cloudflare-staging.acme.storage=/letsencrypt/acme.json"
#
      - "--certificatesresolvers.alpn-ec384.acme.tlsChallenge=true"
      - "--certificatesresolvers.alpn-ec384.acme.caserver=https://acme-v02.api.letsencrypt.org/directory"
      - "--certificatesresolvers.alpn-ec384.acme.email=letsencrypt@mydomain.com"
      - "--certificatesresolvers.alpn-ec384.acme.KeyType=EC384"
      - "--certificatesresolvers.alpn-ec384.acme.storage=/letsencrypt/acme.json"
#
      - "--certificatesresolvers.alpn.acme.tlsChallenge=true"
      - "--certificatesresolvers.alpn.acme.caserver=https://acme-v02.api.letsencrypt.org/directory"
      - "--certificatesresolvers.alpn.acme.email=letsencrypt@mydomain.com"
      - "--certificatesresolvers.alpn.acme.KeyType=EC256"
      - "--certificatesresolvers.alpn.acme.storage=/letsencrypt/acme.json"
#
      - "--certificatesresolvers.alpn-staging.acme.tlsChallenge=true"
      - "--certificatesresolvers.alpn-staging.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory"
      - "--certificatesresolvers.alpn-staging.acme.email=letsencrypt@mydomain.com"
      - "--certificatesresolvers.alpn-staging.acme.KeyType=EC256"
      - "--certificatesresolvers.alpn-staging.acme.storage=/letsencrypt/acme.json"
    environment:
      - CLOUDFLARE_EMAIL=cloudflare@mydomain.com
      - CLOUDFLARE_API_KEY=XYZABC123
    volumes:
      - "./letsencrypt:/letsencrypt"
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
      - "./conf:/etc/traefik/conf:ro"

Замените letsencrypt@mydomain.com на адрес электронной почты для регистрации сертификатов. Также убедитесь, что изменили

cloudflare_env_vars.yml
- CLOUDFLARE_EMAIL=cloudflare@mydomain.com
- CLOUDFLARE_API_KEY=XYZABC123

Опционально создайте токен Pilot и установите его (не забудьте раскомментировать строку) с помощью

pilot_token_example.txt
# - "--pilot.token=PILOT_TOKEN_HERE"

Теперь давайте сделаем службу автозапускаемой при загрузке (и запустим её прямо сейчас) с использованием метода, описанного в генератор .service systemd для docker-compose: Выполните следующее в /opt/traefik

create_docker_compose_service.sh
curl -fsSL https://techoverflow.net/scripts/create-docker-compose-service.sh | sudo bash /dev/stdin

Мы опишем, как получить доступ к API Traefik в последующих постах.


Check out similar posts by category: Networking Traefik