This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
# ---------------------------------------------------------------------------
|
||||
# MAESTRO + Caddy リバースプロキシ (Cloudflare DNS-01 でワイルドカード証明書)
|
||||
#
|
||||
# ベースの docker-compose.yml に重ねて使う。単体では動かない。
|
||||
#
|
||||
# cp .env.caddy.example .env.caddy # 編集して Cloudflare トークンを入れる
|
||||
# docker cp maestro:/app/config.yaml ./config.yaml # 先に必ずやること (下記)
|
||||
# docker compose -f docker-compose.yml -f docker-compose.caddy.yml up -d --build
|
||||
#
|
||||
# 重ねない (`docker compose up` のまま) 既定の構成は一切変わらない。
|
||||
# 手順書: docs/operations/caddy-cloudflare-tls.html
|
||||
#
|
||||
# 必要な Docker Compose: v2.24 以上。これはベースファイルの env_file 記法
|
||||
# (path: / required:) が要求する条件で、下の `!reset` 自体はそれより前の版から
|
||||
# 使える。
|
||||
# ---------------------------------------------------------------------------
|
||||
services:
|
||||
maestro:
|
||||
# 前段に Caddy を置くので、MAESTRO 自身のポートはホストに出さない。
|
||||
#
|
||||
# profiles ではこれができない。ports は {ip, target, published, protocol}
|
||||
# を一意キーとして「追記」されるだけで、別サービスの公開を取り消す手段が
|
||||
# 無いため。`!reset` は重ねたファイルから元の値を消すための Compose の
|
||||
# 仕組み。(`!override []` でも同じ結果になる)
|
||||
ports: !reset []
|
||||
|
||||
volumes:
|
||||
# config.yaml をホスト側に置く。これを重ねると maestro サービスの構成が
|
||||
# 変わるのでコンテナが作り直され、イメージ内の config.yaml は初期状態に
|
||||
# 戻る。プロキシ構成では auth.secure_cookie を書くのが必須なので、
|
||||
# 書いた先が消えないようここで永続化する。
|
||||
#
|
||||
# 【重要】起動する前に、ホスト側の ./config.yaml を用意すること。
|
||||
# 無いまま起動すると Docker が config.yaml という名前の「ディレクトリ」を
|
||||
# 作る。MAESTRO はそれを読もうとして失敗するが、この失敗では止まらず、
|
||||
# 認証設定を持たない状態で読み込まれる。パスワードを持つローカル管理者が
|
||||
# いる環境と新規インストールは起動を拒否するが、OAuth だけの環境は
|
||||
# 認証なしで起動してしまう。既に動いている環境なら重ねる前に
|
||||
# docker cp maestro:/app/config.yaml ./config.yaml
|
||||
# で取り出す。新規なら `config_version: 2` の 1 行だけのファイルでよい。
|
||||
#
|
||||
# 【OAuth を使っている場合はとくに注意】退避せずに起動すると認証設定ごと
|
||||
# 消える。OAuth だけの環境では自動復旧が働かず、認証がかかっていない状態で
|
||||
# 立ち上がる (エージェントは Bash を持つので実質的に遠隔からの任意コード
|
||||
# 実行になる)。上のディレクトリ誤作成も同じ結末に行き着く。
|
||||
#
|
||||
# :ro を付けないこと。設定画面からの保存が書き込むため。コンテナ内の
|
||||
# MAESTRO は node (UID 1000) で動くので、その UID から書ける所有者に
|
||||
# しておくこと。
|
||||
#
|
||||
# ベースの docker-compose.yml で /app/config.yaml に別のホストパスを
|
||||
# 渡している場合、この行が勝ってそちらの指定は黙って捨てられる。
|
||||
# パスを揃えるか、この行を自分のパスに書き換えること。
|
||||
- ./config.yaml:/app/config.yaml
|
||||
|
||||
caddy:
|
||||
build:
|
||||
context: ./deploy/caddy
|
||||
dockerfile: Dockerfile
|
||||
image: maestro-caddy:latest
|
||||
container_name: maestro-caddy
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- maestro
|
||||
ports:
|
||||
- "80:80" # HTTP→HTTPS リダイレクト用。DNS-01 なので発行には不要
|
||||
- "443:443"
|
||||
- "443:443/udp" # HTTP/3
|
||||
# Cloudflare のトークンとホスト名はここだけに置く。ベースの .env は
|
||||
# maestro サービスの env_file なので、そちらに書くとエージェントが
|
||||
# 動くコンテナの環境変数に入ってしまう (Bash ツールから読める)。
|
||||
env_file:
|
||||
- .env.caddy
|
||||
volumes:
|
||||
- ./deploy/caddy/Caddyfile:/etc/caddy/Caddyfile:ro
|
||||
# 取得済みの証明書と ACME アカウント鍵。消すと再発行になり、
|
||||
# Let's Encrypt の発行回数制限に当たりうるので必ず永続化する。
|
||||
- caddy-data:/data
|
||||
- caddy-config:/config
|
||||
|
||||
volumes:
|
||||
caddy-data:
|
||||
driver: local
|
||||
caddy-config:
|
||||
driver: local
|
||||
Reference in New Issue
Block a user