Contents
Docker ComposeでTraefikとLet’s Encrypt自動取得のやり方
Docker Composeを用いたTraefikとの統合およびLet’s Encrypt証明書の自動取得は、Webサービス運用におけるセキュリティ強化と運用効率向上に直結します。本記事では、2023年時点での実装可能な最新技術を基盤にした手順を解説し、DevOpsエンジニアやWeb開発者向けにステップバイステップで具体的な構築方法を提示します。
TraefikとDocker Composeの環境構築準備
TraefikによるHTTPS証明書自動取得は、ホスト環境およびネットワーク設定が整っていることが前提です。以下では必要なツール・設定に加え、注意点も併記します。
必要なツールと前提条件
Traefikを動作させるためには以下の準備が必要です。
- Docker および Docker Compose のインストール
- バージョンは2023年現在で v24.x以上 推奨(最新版の確認が必須)。
- ホストOSのネットワーク設定
- 公開IPアドレス割り当てとポート開放(80, 443)が不可欠です。
- Let’s Encryptアカウント情報
- ACMEのメールアドレスやAPIトークンなどのセキュリティ情報が必要です。
注意: Docker Composeファイルの構文ミスによりTraefik起動失敗する可能性があります。基本構造を事前に確認してください。
Docker Composeファイルの基本構造
Docker ComposeでTraefikを立ち上げる際、コンテナ間通信や証明書管理が鍵となります。以下は簡単な設定例です。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
version: '3.8' services: traefik: image: traefik:v2.10 container_name: traefik ports: - "80:80" - "443:443" volumes: - ./traefik:/etc/traefik - /var/run/docker.sock:/var/run/docker.sock networks: - web networks: web: driver: bridge |
ポイント:
volumesでDockerソケットをマウントし、Traefikがコンテナ情報を取得できるようにします。また、ネットワークセグメンテーションによりサービス間の通信管理を行います。
Docker ComposeによるTraefik構築手順
Traefikの設定ファイル(traefik.yml)はルーティングや証明書管理の根幹です。最新バージョンに合わせたYAML記法で構築してください。
traefik.yamlの基本設定例
以下は、HTTPチャレンジとDNSチャレンジを備えた設定ファイルの例です。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
entryPoints: web: address: ":80" websecure: address: ":443" providers: docker: exposedByDefault: false certificatesResolvers: letsencrypt-http: acme: email: [メールアドレス] storage: /etc/traefik/acme.json httpChallenge: entryPoint: web letsencrypt-dns: acme: email: [メールアドレス] storage: /etc/traefik/acme.json dnsChallenge: provider: cloudflare delayBeforeCheck: 0 |
注意: DNSチャレンジの場合は、Cloudflare APIトークンを
.envファイルで管理する必要があります。
コンテナ間通信のベストプラクティス
TraefikとWebアプリケーションは同一ネットワークに所属し、ルーティングされるように設計します。以下が推奨される構成です。
- 専用ネットワーク作成
-
networksセクションでwebネットワークを定義し、TraefikとWebサービスの接続を確立します。 -
ポートマッピングの注意点
-
ホストとコンテナのポートが一致しない場合、通信エラーが発生する可能性があります。
-
ラベル設定による自動ルーティング
- WebアプリケーションのDocker Composeに
traefik.http.routers.<route-name>.ruleなどのラベルを追加し、自動ルート設定を行います。
Let's Encryptリゾルバの設定方法
Let’s Encrypt証明書取得にはACMEアカウント情報とDNSチャレンジの設定が不可欠です。セキュリティ対策も重要になります。
ACMEアカウントのセキュアな管理
ACMEアカウント情報を安全に保存する方法として以下の手順があります。
- 環境変数による暗号化
-
emailやstorageなどの情報は.envファイルで管理し、リポジトリにはコミットしないようにしましょう。 -
秘密鍵の保護
-
ACMEアカウント情報をホスト側の暗号化ツール(例:
ansible-vault)で管理する方法があります。 -
定期的な更新ポリシーの設定
- 90日有効なLet’s Encrypt証明書は自動更新が必須です。
certificatesResolversにautoRenewフラグを追加してください。
注意: ACMEアカウント情報(特にメールアドレス)の公開リスクがあります。秘密管理に注意してください。
DNS-01チャレンジの有効化
DNS-01チャレンジでは、CloudflareやRoute53などDNSプロバイダーのAPIを使用します。以下はCloudflareを使った設定例です。
|
1 2 3 4 5 6 7 8 9 |
certificatesResolvers: letsencrypt-dns: acme: email: [メールアドレス] storage: /etc/traefik/acme.json dnsChallenge: provider: cloudflare delayBeforeCheck: 0 |
ポイント: DNS-01チャレンジではTraefikがDNSレコードを自動で更新します。この際、CloudflareのAPIトークンが必要です。
Cloudflareでのワイルドカード証明書取得
Cloudflareを使用してワイルドカード証明書を自動取得するには、CNAMEレコードとDNSチャレンジ設定が不可欠です。
CNAMEレコードの設定確認
Cloudflareでワイルドカード証明書を取得するために、以下のようにCNAMEレコードを設定してください。
| レコードタイプ | 名前(Host) | 値(Value) |
|---|---|---|
| CNAME | *.example.com |
example.com |
注意: CNAMEレコードの設定ミスにより、DNSチャレンジに失敗することがあります。定期的に確認してください。
TraefikのDNSチャレンジ設定
Cloudflare APIトークンをTraefikに渡して自動証明書取得を実現します。
- Cloudflare APIトークンを作成
-
スコープ(
Zone:Read,Zone:Writeなど)を持つトークンを作成してください。 -
Traefikのコンフィグに追加
yaml
certificatesResolvers:
letsencrypt-dns:
acme:
email: [メールアドレス]
storage: /etc/traefik/acme.json
dnsChallenge:
provider: cloudflare
resolvers:
- "cloudflare-resolver" -
APIトークンを
.envに保存
env
CLOUDFLARE_API_TOKEN=your-cloudflare-api-token
ポイント: APIトークンは
.envファイルで管理し、リポジトリには含めないよう注意してください。
セキュリティ強化と運用ベストプラクティス
Traefikの運用ではセキュリティ設定とログ監視を常に意識する必要があります。特に証明書の自動更新やエラーロギングが重要です。
自動更新ポリシーの最適化
Let’s Encrypt証明書は90日有効で、以下のように自動更新を管理できます。
|
1 2 3 4 5 6 7 8 |
certificatesResolvers: letsencrypt: acme: certificateConstraints: - domains: - "*.example.com" - "www.example.com" |
ポイント:
certificateConstraintsで証明書の有効期限や対象ドメインを指定できます。自動更新失敗時に備え、定期的な監視体制を構築してください。
エラーロギングの有効化
Traefikのロギング設定により、証明書取得時のエラーをリアルタイムで確認できます。
|
1 2 3 |
log: level: DEBUG |
注意: デバッグレベルのログは運用環境では不要ですが、開発やテスト環境では有効にしておくと問題発見が早くなります。
まとめ
本記事では、2023年時点で実装可能な技術を基にしたTraefikとLet’s Encrypt自動取得の手順を解説しました。以下のポイントに注意し、あなたの環境でSSL証明書の自動管理を実現してください。
- Docker Composeとtraefik.ymlの構成
- ACMEアカウント情報のセキュリティ管理
- CloudflareでのDNSチャレンジ設定
- ワイルドカード証明書取得時のCNAME確認
- 自動更新ポリシーとエラーロギングの有効化
設定中に疑問があればコメントでご質問ください。