なつねこメモ

主にプログラミング関連のメモ帳 ♪(✿╹ヮ╹)ノ 書いてあるコードは自己責任でご自由にどうぞ。記事本文の無断転載は禁止です。

Traefik で Let's Encrypt の DNS チャレンジを Cloudflare でしたい

Traefik というクラウドネイティブ時代に合わせた良い感じのリバースプロキシーを使う機会があって、その際 Let's Encrypt での証明書生成もこいつだけでできるとのことだったので、やり方のメモ。
こういった docker-compose.yml (関係ない部分は略) があったとして、 acme.dnschallenge 関連を有効にすれば良い。
今回は DNS プロバイダーとして Cloudflare を使うので、 provider=cloudflare と設定。
ちなみにサポートしているプロバイダー一覧はこのページにまとまってる。

あとは、プロバイダーにあわせた環境変数を設定すると OK。
内部的には Lego を使っているようで、同じ感じに設定してあげると動いてくれる。

設定例としては、こんな感じ:

version: "3.7"

services:
  traefik:
    image: "traefik"
    restart: always
    command:
      # 他は略
      - "--certificatesresolvers.mytlschallenge.acme.dnschallenge=true"
      - "--certificatesresolvers.mytlschallenge.acme.dnschallenge.provider=cloudflare"
      - "--certificatesresolvers.mytlschallenge.acme.email=${SSL_EMAIL}"
      - "--certificatesresolvers.mytlschallenge.acme.storage=/letsencrypt/acme.json"
    ports:
      - "80:80"
      - "443:443"
    environment:
      - CF_API_EMAIL=${CLOUDFLARE_EMAIL}
      - CF_DNS_API_TOKEN=${CLOUDFLARE_DNS_API_TOKEN}
      - CF_ZONE_API_TOKEN=${CLOUDFLARE_ZONE_API_TOKEN}
    volumes:
      - traefik_data:/letsencrypt
      - /var/run/docker.sock:/var/run/docker.sock:ro

volumes:
  traefik_data:
    external: true

簡単。