Traefik

Traefik v3 と DockerでCloudflare DNS‑01を利用しLet’s Encryptワイルドカード証明書を自動取得

ⓘ本ページはプロモーションが含まれています

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


スポンサードリンク

前提条件と全体像

本ガイドでは、Docker 上に Traefik v3 をデプロイし、Cloudflare の API トークン を利用して Let’s Encrypt からワイルドカード証明書(*.example.com)を自動取得・更新する手順を解説します。
この構成は以下の点で重要です。

  1. HTTPS 化が必須なマルチテナント環境でも、ポート 80 が閉じていても証明書取得できる。
  2. 最小権限の API トークンを使うことで、トークン漏洩時のリスクを低減できる。

以下では、必要な前提条件からインストール、設定ファイル作成、動作確認、運用・トラブルシューティングまでを段階的に示します。


必要なソフトウェアとバージョン(2026年6月現在)

ソフトウェア 推奨バージョン 入手先
Docker Engine ≥ 23.0 (Ubuntu 22.04 LTS の公式パッケージ) https://docs.docker.com/engine/install/
Docker Compose v2.27.0 以上 https://github.com/docker/compose/releases
Traefik v3.0 (最新安定版) https://doc.traefik.io/traefik/
Cloudflare API Edit zone DNS 権限を持つトークン Cloudflare ダッシュボード

Docker と Docker Compose のインストール

Docker と Docker Compose が未インストールの場合は、以下の手順でセットアップします。各コマンドは Ubuntu 22.04 LTS を想定していますが、他ディストリビューションでも同様の流れです。

Docker Engine のインストール

Docker の公式リポジトリを追加し、最新版をインストールします。

インストール後にバージョンを確認し、23.0 以上であることを確かめます。

Docker Compose のインストール

公式バイナリをダウンロードして実行権限を付与します。

ポイント:Docker と Compose のバージョンが公式推奨を上回っていれば、Traefik は問題なく動作します。


Cloudflare API トークンの取得と安全な取り扱い

Cloudflare で DNS‑01 チャレンジを利用するには、最小権限Edit zone DNS)の API トークンが必要です。このトークンは環境変数 CF_API_TOKEN 経由でコンテナに渡すことで、平文で設定ファイルに記載しないようにします。

手順概要

  1. Cloudflare にログイン → 左メニューの My Profile > API Tokens を開く。
  2. Create Token ボタンをクリックし、テンプレートから “Edit zone DNS” を選択。
  3. 対象ゾーン(例: example.com)のみをスコープに指定し、トークン名を入力して作成。

環境変数としての注入方法

  • トークンはプロジェクトルートに .env ファイルを作成し、Git 管理から除外.gitignore*.env を追加)します。

Docker Compose は自動的に .env を読み込み、environment: セクションで変数展開できます。

出典:Cloudflare の公式ドキュメント「API Tokens」を参照。


Traefik 基本設定ファイルの作成

Traefik の設定は YAML(traefik.yml)または TOML 形式で記述できますが、ここでは YAML を採用します。以下の構成は最小限かつベストプラクティスを盛り込んだものです。

traefik.yml の全体像

各項目の簡易解説

  • log.level:DEBUG にすると ACME の取得・更新過程が詳細に出力され、トラブル時に有用。
  • redirections:HTTP → HTTPS の自動リダイレクトを設定し、全通信を暗号化。
  • providers.docker.exposedByDefault: false:意図しないコンテナが外部公開されるのを防止。
  • certificatesResolvers.letsencrypt.acme.storage:証明書情報は永続ボリュームに保存し、再起動後も保持。
  • dnsChallenge.provider: cloudflare:Cloudflare API を利用した DNS‑01 チャレンジ。
  • api.insecure: false と Basic Auth(後述)でダッシュボードへの不正アクセスを防止。

Docker Compose によるデプロイ

Docker Compose では Traefik コンテナと永続化用ボリュームだけを定義すれば、ワンコマンドで起動できます。以下は 最小構成 として推奨する docker-compose.yml の例です。

docker-compose.yml 全体

設定ポイント

  • ports8080 を追加し、ダッシュボードへのアクセス用エントリーポイントを公開。
  • environment.envCF_API_TOKEN が自動的に注入されます。
  • 永続化ボリューム letsencryptacme.json を格納し、証明書の永続化を実現。

acme.json の作成と権限設定

注意:パーミッションが緩すぎると Traefik 起動時に permission denied エラーが出ます。


Traefik ダッシュボードの認証保護(Basic Auth)

ダッシュボードは管理情報が露出するため、必ず Basic Auth で保護します。以下では htpasswd コマンドでハッシュ化したパスワードを利用する手順を示します。

1. 認証情報の生成

生成された文字列(admin:$apr1$...)をコピーします。

2. 動的設定ファイル middlewares.yml の作成

3. traefik.yml に動的設定ファイルを読み込む指示を追加

4. Docker Compose にボリュームマウントを追加

5. ダッシュボードへのアクセス確認

ブラウザで http://<サーバIP>:8080/dashboard/ にアクセスすると、ユーザー名とパスワードの入力が求められます。正しく認証できればダッシュボードが表示されます。

ベストプラクティス:管理者アカウントは定期的にローテーションし、強力なパスフレーズを使用してください。


Cloudflare DNS‑01 チャレンジでワイルドカード証明書取得

手順概要

  1. Traefik 起動 → ACME クライアントが CF_API_TOKEN を用いて _acme-challenge.example.com の TXT レコードを作成。
  2. Let’s Encrypt が DNS レコードの存在確認後、ワイルドカード証明書(*.example.com)とベースドメイン証明書を発行。
  3. 証明書は acme.json に永続保存され、期限が近づくと自動的に更新処理が走る。

DNS‑01 のオプション詳細

オプション 説明
provider: cloudflare Cloudflare API を利用することを指定。
delayBeforeCheck DNS 変更直後の検証待機秒数(TTL が短い環境では 0、長めにしたい場合は 10 等)。

外部情報の要約:2025 年に公開された Mayopan 記事「Traefik v3 を Docker で構築し Let’s Encrypt のワイルドカード証明書を取得してみた」では、同様の手順と delayBeforeCheck: 0 が推奨されていることが報告されています(Mayopan, 2025)。本ガイドはその内容を踏まえて最新の公式情報に合わせています。


動作確認手順

基本的な HTTP/HTTPS テスト

証明書情報の取得

出力例:

ダッシュボードへの認証テスト

ブラウザで http://<IP>:8080/dashboard/ にアクセスし、先ほど設定した admin / StrongPassword123 でログインできることを確認します。


トラブルシューティングとベストプラクティス

よくあるエラーと対処法(まとめ)

エラーメッセージ 主な原因 推奨解決策
port 80 is already in use ホスト上の別サービスが 80 番ポートを占有 sudo lsof -i :80 でプロセス特定し、停止または Traefik のポート変更
DNS timeout Cloudflare API が遅延/TTL が長い delayBeforeCheck に数秒の余裕 (10) を設定
CF_API_TOKEN permission denied トークンに必要権限が付与されていない ダッシュボード → API Tokens で「Edit zone DNS」スコープを再確認
acme.json: permission denied ファイル所有者・パーミッション不正 chmod 600 acme.json && chown $(whoami):$(whoami) acme.json

セキュリティ上の追加対策

  1. 最小権限トークンを必ず使用し、不要なスコープは外す。
  2. acme.json600 権限で保護し、ホスト側でもマウント先ディレクトリへのアクセス制御を行う。
  3. ダッシュボードは Basic Auth + HTTPS で保護し、IP 制限(Traefik の middlewares.ipWhiteList)を併用するとさらに安全です。

IP ホワイトリスト例(H4)

このミドルウェアをダッシュボードのエントリポイントに適用すれば、許可された IP からのみアクセス可能になります。


まとめ

  • Docker + Traefik v3 の構成で、Cloudflare DNS‑01 によりワイルドカード証明書を自動取得・更新できる。
  • 最小権限の API トークン環境変数 .env で安全にトークンを管理し、平文保存は避ける。
  • ダッシュボードは Basic Auth + IP ホワイトリスト によって保護し、外部からの不正閲覧を防止する。
  • 設定変更やアップデート時は公式ドキュメントと本ガイドの日付(2026年6月)を基準に確認し、バージョン差異による問題を未然に防ぐ。

この手順通りに実装すれば、Docker 環境で安全かつスケーラブルな HTTPS インフラが構築できます。質問やトラブルが生じた場合は、本稿の「トラブルシューティング」セクションと公式リポジトリの Issue トラッカーを併せてご活用ください。

スポンサードリンク

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


-Traefik