使用 Cloudflare 设置 Traefik

Oti*_*ght 6 ssl reverse-proxy docker docker-compose traefik

我正在尝试结合使用本指南和此处找到的代码来设置 traefik 。

我正在docker-compose与 Unraid 一起使用,到目前为止我有以下代码:

traefik.toml:

debug = false

logLevel = "ERROR"
defaultEntryPoints = ["https","http"]

[entryPoints]
  [entryPoints.http]
  address = ":80"
    [entryPoints.http.redirect]
    entryPoint = "https"
  [entryPoints.https]
  address = ":443"
  [entryPoints.https.tls]

[retry]

[acme]
email = "user@domain.com"
storage = "acme.json"
entryPoint = "https"
#OnHostRule = true
#onDemand = true
[acme.dnsChallenge]
  provider = "cloudflare"
[[acme.domains]]
   main = "domain.name"
[[acme.domains]]
   main = "*.domain.name"
Run Code Online (Sandbox Code Playgroud)

docker-compose.yml:

services:

  traefik:
    image: traefik:latest
    command: --web --docker --docker.watch --docker.domain=${DOMAIN} \
             --docker.exposedbydefault=false --acme.domains=${DOMAIN}
    container_name: traefik
    hostname: traefik
    networks:
      br0:
        ipv4_address: 192.168.1.253
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ${CONFIG}/traefik/acme.json:/acme.json
      - ${CONFIG}/traefik/traefik.toml:/etc/traefik/traefik.toml
      - ${CONFIG}/traefik/.htpasswd:/etc/traefik/.htpasswd:ro
    environment:
      - CF_API_EMAIL=user@domain.com
      - CF_API_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXX
    labels:
      traefik.enable: "true"
      traefik.frontend.rule: "Host:monitor.${DOMAIN}"
      traefik.port: "8080"
      traefik.frontend.auth.basic: "${HTPASSWD}"
      com.ouroboros.enable: "true"
    restart: unless-stopped

  ouroboros:
    image: pyouroboros/ouroboros
    container_name: ouroboros
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - PGID
      - PUID
      - TZ
      - CLEANUP=true
      - INTERVAL=86400  # 24hrs
      - SELF_UPDATE=true
      - LABELS_ONLY=true
    restart: unless-stopped

  plex:
    image: linuxserver/plex
    container_name: plex
    hostname: plex
    networks:
      br0:
        ipv4_address: 192.168.1.252
    volumes:
      - ${CONFIG}/plex:/config
      - ${DATA}/TV:/media/tv
      - ${DATA}/Movies:/media/movies
      - ${DATA}/Music:/media/music
      - ${DATA}/Anime:/media/anime
    environment:
      - PGID
      - PUID
      - TZ
      - VERSION=latest
    labels:
      traefik.enable: "true"
      traefik.port: "32400"
      traefik.frontend.rule: "Host:plex.${DOMAIN}"
      com.ouroboros.enable: "true"
    restart: unless-stopped

  plexpy:
    image: linuxserver/tautulli:latest
    container_name: tautulli
    hostname: tautulli
    networks:
      br0:
        ipv4_address: 192.168.1.251
    volumes:
      - ${CONFIG}/plexpy:/config
      - ${CONFIG}/plex/Library/Application Support/Plex Media Server/Logs:/logs:ro
    environment:
      - PGID
      - PUID
      - TZ
    labels:
      traefik.enable: "true"
      traefik.port: "8181"
      traefik.frontend.rule: "Host:tautulli.${DOMAIN}"
      traefik.frontend.auth.basic: "${HTPASSWD}"
      com.ouroboros.enable: "true"
    restart: unless-stopped

  heimdall:
    image: duhio/heimdall-https:latest
    container_name: heimdall
    hostname: heimdall
    networks:
      br0:
        ipv4_address: 192.168.1.250
    volumes:
      - ${CONFIG}/heimdall:/config
    environment:
      - PGID
      - PUID
      - TZ
    labels:
      traefik.enable: "true"
      traefik.port: "80"
      traefik.frontend.rule: "Host:${DOMAIN}"
      traefik.frontend.auth.basic: "${HTPASSWD}"
      com.ouroboros.enable: "true"
    restart: unless-stopped

  ombi:
    image: linuxserver/ombi
    container_name: ombi
    hostname: ombi
    networks:
      br0:
        ipv4_address: 192.168.1.249
    volumes:
      - ${CONFIG}/ombi:/config
    environment:
      - PGID
      - PUID
      - TZ
    labels:
      traefik.enable: "true"
      traefik.port: "3579"
      traefik.frontend.rule: "Host:ombi.${DOMAIN}"
      com.ouroboros.enable: "true"
    restart: unless-stopped

# br0 is an existing Unraid macvlan
networks:
  br0:
    external: true
Run Code Online (Sandbox Code Playgroud)

当我使用时,OnHostRule = true我可以plex.domain.name使用https但不能使用其他子域。

更新:我得出的结论是,问题是通配符域不起作用,在与 Redditor 交谈后,他不确定在使用docker-compose.yml静态 IP 手动指定网络时通配符是否会起作用,到目前为止我无法确认这一点。

进一步挖掘,我认为这可能是 Cloudflare 级别的问题,来源此处并报告此处

dal*_*ler 2

编辑:此配置对于 Traefik 2.0 及更高版本现已过时


我在 Cloudflare 中使用通配符。这是我的配置:

traefik.toml我的文件的一部分

[acme]
  acmeLogging = true
  email = "me@email.com"
  storage = "/acme.json"
  onHostRule = true
  entryPoint = "https"
  [acme.dnsChallenge]
    provider = "cloudflare"

  [[acme.domains]]
    main = "sub.domain.com"
  [[acme.domains]]
    main = "*.sub.domain.com"
Run Code Online (Sandbox Code Playgroud)

然后在docker-compose.yml启动traefik服务的文件中指定一个 env 文件:

env_file: ./traefik.env
Run Code Online (Sandbox Code Playgroud)

在此文件中,我有以下环境变量:

CLOUDFLARE_EMAIL=value1
CLOUDFLARE_API_KEY=value2
CF_API_EMAIL=value1
CF_API_KEY=value2
Run Code Online (Sandbox Code Playgroud)

我希望你能从我的例子中得到一些可以尝试并取得成功的东西!

我强烈建议debug=true在您的traefik.toml文件中添加,因为它将显示日志,指示 cloudflare 设置是否成功以及针对哪些域。