Traefik Cloudflare DNS 挑战

Docker Compose 配置示例

traefik:
  image: "traefik:2.3.7"
  container_name: "traefik"
  restart: unless-stopped
  ports:
    - "80:80"
    - "443:443"
    #- "8080:8080"
  environment:
    - CF_DNS_API_TOKEN=${CF_DNS_API_TOKEN}
  volumes:
    - ./traefik/config:/etc/traefik
    - traefik-ssl-certs:/ssl-certs
    - /etc/localtime:/etc/localtime
    - "/var/run/docker.sock:/var/run/docker.sock:ro"
  depends_on:
    - app
  labels:
    - "traefik.enable=true"
    - "traefik.http.routers.traefik.entrypoints=websecure"
    - "traefik.http.routers.traefik.tls.certresolver=myresolver"
    - "traefik.http.routers.traefik.rule=Host(`traefik.domain.id`)"
    - "traefik.http.routers.traefik.service=api@internal"

将 traefik.domain.id 替换为您的实际域名。

创建一个 .env 文件并添加以下内容:

CF_DNS_API_TOKEN=

此令牌可从 Cloudflare 获取。

在 Cloudflare 中创建 API 令牌的步骤,该令牌具有管理域 DNS 所需的权限

步骤 1:登录您的 Cloudflare 账户

  • 访问 Cloudflare 并使用您的凭据登录。
  • 第 2 步:访问 API 令牌设置

  • 登录后,点击右上角的头像或账户名。
  • 从下拉菜单中选择我的个人资料。
  • 在个人资料页面上,导航到 API 令牌选项卡。
  • 步骤 3:创建新的 API 令牌

  • 单击创建令牌按钮。
  • 如果要自定义权限,请选择编辑区域 DNS 模板或单击创建自定义令牌。
  • Langkah 4:Mengatur Izin API 令牌

    如果选择创建自定义令牌:

    代币配置步骤

  • 令牌名称:\ 为您的令牌命名,例如 Traefik DNS Challenge。
  • 权限:单击添加权限。选择区域作为服务。选择 DNS 作为资源。选择编辑作为操作。
  • 区域资源:单击添加区域资源。选择包括。选择所有区域或特定区域以限制对特定区域的访问。如果选择特定区域,请指定域,例如 example.com。
  • 客户端 IP 地址过滤(可选):\如果您想限制令牌使用到某些 IP,请添加特定的 IP 地址。
  • TTL(可选):\ 如果需要,设置令牌过期期限。
  • 步骤 5:创建并保存 API 令牌

  • 单击“继续”查看摘要。
  • 检查令牌设置以确保其正确无误。
  • 单击创建令牌。
  • 步骤 6:保存 API 令牌

  • 创建令牌后,将其复制并保存在安全的位置。> 注意:这是唯一一次显示令牌,因此请确保正确记录它。
  • 创建 traefik/config/traefik.yaml 文件:

    global:
      checkNewVersion: false
      sendAnonymousUsage: false
    
    api:
      dashboard: true
      debug: true
    
    accessLog: {}
    
    entryPoints:
      web:
        address: :80
    
      websecure:
        address: :443
    
    serversTransport:
      insecureSkipVerify: true
    
    http:
      middlewares:
        redirect-to-https:
          redirectScheme:
            scheme: https
            permanent: true
    
    certificatesResolvers:
      myresolver:
        acme:
          email: xxx@gmail.com
          storage: /ssl-certs/acme.json
          dnsChallenge:
            provider: cloudflare
            resolvers:
              - "1.1.1.1:53"
              - "8.8.8.8:53"
            delayBeforeCheck: 5
    
    providers:
      docker:
        endpoint: "unix:///var/run/docker.sock"
        exposedByDefault: false
      file:
        directory: /etc/traefik
        watch: true

    将 xxx@gmail.com 替换为您用于 Cloudflare 的电子邮件。

    运行 Traefik

    运行以下命令启动 Traefik:

    docker compose up -d

    然后,通过 http://traefik.domain.id 或您输入的域名访问仪表板

    配置已完成。

    调试 DNS 质询过程

    要调试 DNS 质询,请使用以下命令检查文件:

    cat /ssl-certs/acme.json

    但是,您需要先访问 Traefik 容器:

    docker exec -it traefik sh

    规范网址

    欲了解更详细信息,请访问我博客上的原始帖子。