No description
Find a file
2026-03-23 17:48:03 +09:00
nginx-conf chore: remove redundant joplin-rag vhost configs 2026-03-18 13:39:45 +09:00
vhost.d joplin-ragタイム・アウトしない設定、openclawのセキュリティ設定を追加 2026-03-23 17:48:03 +09:00
.gitignore Refactor: move secrets to .env and ignore .env 2026-01-10 16:28:00 +09:00
docker-compose.yml DockhandやWatchtowerなどの自動更新ツールによってコンテキスト(作業場所)が異なっても、マウントパスを見失うリスクはなくなりました。 2026-02-03 18:37:48 +09:00
docker-compose.yml.bak DockhandやWatchtowerなどの自動更新ツールによってコンテキスト(作業場所)が異なっても、マウントパスを見失うリスクはなくなりました。 2026-02-03 18:37:48 +09:00
README.md Add README.md 2026-01-10 13:48:27 +09:00

Nginx Proxy with Let's Encrypt (DNS-01 Challenge)

Docker Compose で動作する、自動 SSL 証明書管理機能付きのリバースプロキシ環境です。 nginx-proxyacme-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 に以下の設定を追加します。

  1. 環境変数:

    • VIRTUAL_HOST=subdomain.yourdomain.com: アクセスするドメイン名
    • LETSENCRYPT_HOST=subdomain.yourdomain.com: 証明書を取得するドメイン名
    • VIRTUAL_PORT=80: アプリが使用するポート標準の80以外の場合
  2. ネットワーク:

    • このプロキシと同じネットワーク(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