No description
| nginx-conf | ||
| vhost.d | ||
| .gitignore | ||
| docker-compose.yml | ||
| docker-compose.yml.bak | ||
| README.md | ||
Nginx Proxy with Let's Encrypt (DNS-01 Challenge)
Docker Compose で動作する、自動 SSL 証明書管理機能付きのリバースプロキシ環境です。
nginx-proxy と acme-companion を組み合わせ、Cloudflare DNS API を使用した DNS-01 認証により SSL 証明書を自動取得・更新します。
概要
自宅サーバーなどのリバースプロキシとして機能し、サブドメインごとのルーティングと HTTPS 化を自動で行います。
- nginx-proxy: コンテナの起動・停止を検知して Nginx の設定を自動更新し、リクエストを振り分けます。
- letsencrypt (acme-companion): Cloudflare DNS API を利用して Let's Encrypt から証明書を取得します。DNS-01 認証を使用しているため、80番ポートが開放されていなくても証明書の取得が可能です。
使い方
起動
docker-compose up -d
新しいサービスの追加
リバースプロキシ経由で公開したいコンテナ(Webアプリなど)の docker-compose.yml に以下の設定を追加します。
-
環境変数:
VIRTUAL_HOST=subdomain.yourdomain.com: アクセスするドメイン名LETSENCRYPT_HOST=subdomain.yourdomain.com: 証明書を取得するドメイン名VIRTUAL_PORT=80: アプリが使用するポート(標準の80以外の場合)
-
ネットワーク:
- このプロキシと同じネットワーク(
proxy-tier)に参加させる必要があります。
- このプロキシと同じネットワーク(
例:
services:
webapp:
image: ...
environment:
- VIRTUAL_HOST=app.example.com
- LETSENCRYPT_HOST=app.example.com
networks:
- proxy-tier
networks:
proxy-tier:
external: true
ディレクトリ構成
docker-compose.yml: 構成定義ファイルvhost.d/: バーチャルホストごとの個別 Nginx 設定(アップロードサイズ制限の緩和など)nginx-conf/: Nginx 全体のカスタム設定や Basic 認証用の.htpasswdファイルcerts/: 取得した SSL 証明書(Git 管理対象外)html/: Nginx のデフォルトページや ACME チャレンジ用ファイル(Git 管理対象外)logs/: アクセスログなど(Git 管理対象外)
DNS-01 認証設定
docker-compose.yml 内で Cloudflare の API Token を設定しています。
- ACME_CHALLENGE=DNS-01
- ACMESH_DNS_API_CONFIG={"DNS_API":"dns_cf"}
- CF_Token=YOUR_TOKEN
- CF_Account_ID=YOUR_ACCOUNT_ID