dbrennand.caddy_docker
Ansibleロール: dbrennand.caddy_docker
このAnsibleロールは、Dockerコンテナ内にCaddyをデプロイするためのものです。
必要条件
community.docker
Ansibleコレクションが必要です:ansible-galaxy collection install community.docker
ロール変数
caddy_docker_state: present
このロールによってデプロイされたリソースの状態を管理します。Caddyのディレクトリ(データと設定)、Caddyfile、Dockerネットワーク、イメージ、コンテナを削除するにはabsent
に設定します。
caddy_docker_config_directory:
path: ~/.config/caddy/
# オプション
# owner: owner
# group: group
# mode: 0755
caddy_docker_data_directory:
path: ~/.local/share/caddy/
作成されるCaddyの設定およびデータディレクトリの絶対パス。コンテナにバインドマウントとしてアタッチされます。
caddy_docker_caddyfile: |-
localhost
respond "Hello, world!"
Caddyを設定するためのCaddyfileの内容です。
caddy_docker_caddyfile_file:
path: ~/.config/Caddyfile
# ...
作成されるCaddyfileの絶対パス。コンテナにバインドマウントとしてアタッチされます。
caddy_docker_image: caddy:2.7.4-alpine
caddy_docker_builder_image: caddy:2.7.4-builder
Caddyをコンテナとしてデプロイするために使用するコンテナイメージのリポジトリ、名前、およびタグ。caddy_docker_builder_image
変数は、caddy_docker_plugins
が設定されている場合のみ使用されます。
caddy_docker_builder_directory:
path: /tmp/caddy-builder/
# ...
コンテナのビルドコンテキストとして使用されるディレクトリの絶対パス。この変数は、caddy_docker_plugins
が設定されている場合のみ使用されます。独自のdockerfileテンプレートを持ち、Caddyコンテナのビルドプロセス中にファイルを含めたい場合は、この変数を上書きすることをお勧めします。
caddy_docker_builder_template: dockerfile.j2
# ルックアッププラグインを使用
# caddy_docker_builder_template: "{{ lookup('template', 'templates/dockerfile.custom.j2') }}"
Caddyコンテナをビルドするために使用するDockerfileテンプレート。この変数は、caddy_docker_plugins
が設定されている場合のみ使用されます。
caddy_docker_builder_force: false
Caddyコンテナの再ビルドを強制するかどうか。この変数は、caddy_docker_plugins
が設定されている場合のみ使用されます。
caddy_docker_plugins: []
# 例
# caddy_docker_plugins:
# - github.com/caddy-dns/cloudflare
# - github.com/lucaslorentz/caddy-docker-proxy/v2
Caddyコンテナに含めるプラグインのリストです。
caddy_docker_networks:
- name: caddy
Caddyコンテナに作成して接続するDockerネットワークの名前です。
caddy_docker_network_mode: default
Caddyコンテナに使用するDockerネットワークモード。caddy_docker_networks
、caddy_docker_ports
、およびcaddy_docker_exposed_ports
変数は、この変数がhost
に設定されている場合は影響しません。
caddy_docker_command: caddy run --config /etc/caddy/Caddyfile --adapter caddyfile
Caddyコンテナを起動するためのコマンドです。プラグインを使用する場合は、これを上書きすることをお勧めします。
caddy_docker_restart_policy: unless-stopped
Caddyコンテナの再起動ポリシーです。
caddy_docker_ports:
- 80:80
- 443:443
- "443:443/udp"
caddy_docker_exposed_ports: []
# 例
# caddy_docker_exposed_ports:
# - 9000
Caddyコンテナで公開するポートです。
caddy_docker_etc_hosts: {}
# 例
# caddy_docker_etc_hosts:
# host.docker.internal: host-gateway
Caddyコンテナの/etc/hosts
ファイルに配置するホストからIPへのマッピングです。
caddy_docker_extra_volumes: []
# 例
# caddy_docker_extra_volumes:
# - /site:/srv
Caddyコンテナに接続する追加のボリュームです。
caddy_docker_environment_variables: {}
# 例
# caddy_docker_environment_variables:
# DOMAIN: example.com
Caddyコンテナに適用する環境変数です。
依存関係
なし。
例のプレイブック
- name: dbrennand.caddy_docker
hosts: all
vars:
pip_install_packages:
- name: docker
pre_tasks:
- name: aptキャッシュの更新
ansible.builtin.apt:
update_cache: true
roles:
- geerlingguy.pip
- geerlingguy.docker
- dbrennand.caddy_docker
例 - Cloudflare DNS-01 チャレンジ
この例では、Cloudflare用のCaddyモジュールを使用して、Let’s Encryptから証明書(ワイルドカードを含む)を取得します。これは、ポート80(HTTP)をインターネットに開放せずに証明書を取得したい場合に便利です。
CaddyがCloudflare APIに認証するためのAPIトークンを生成し、DNS-01チャレンジのためのTXTレコードを作成する必要があります:
Cloudflareのダッシュボードプロファイルページに移動します。
左側でAPIトークン > トークンの作成を選択します。
Edit zone DNSというAPIトークンテンプレートを選択します。
トークン名を好きなように変更します。
権限の下で**+ 追加**を選択し、権限
Zone / Zone / Read
を追加します。ゾーンリソースの下でゾーンを含めます:
Include / Specific zone / example.tld
。オプション - 必要に応じてクライアントIPアドレスフィルタリングを構成します。
サマリーに進むをクリックしてトークンを作成します。
- name: dbrennand.caddy_docker - Cloudflare
hosts: all
vars:
# geerlingguy.pipロールの変数
pip_install_packages:
- name: docker
# dbrennand.caddy_dockerロールの変数
caddy_docker_caddyfile: |-
{
email {$ACME_EMAIL}
}
# Cloudflare DNS-01チャレンジ
(cloudflare) {
tls {
dns cloudflare {$CLOUDFLARE_API_TOKEN}
}
}
service.{$DOMAIN} {
import cloudflare
reverse_proxy container:port
}
caddy_docker_plugins:
- github.com/caddy-dns/cloudflare
caddy_docker_environment_variables:
DOMAIN: domain.tld
ACME_EMAIL: [email protected]
CLOUDFLARE_API_TOKEN: token
pre_tasks:
- name: aptキャッシュの更新
ansible.builtin.apt:
update_cache: true
roles:
- geerlingguy.pip
- geerlingguy.docker
- dbrennand.caddy_docker
例 - Tailscale
この例では、artis3n/ansible-role-tailscaleを使用してTailscaleをインストールし、Caddyを構成してLet's Encryptから証明書を取得します。Tailnet用にMagicDNSとHTTPS証明書機能が有効になっている必要があります。
- name: dbrennand.caddy_docker - Tailscale
hosts: all
vars:
# geerlingguy.pipロールの変数
pip_install_packages:
- name: docker
# artis3n.tailscaleロールの変数
tailscale_authkey: key
# dbrennand.caddy_dockerロールの変数
caddy_docker_caddyfile: |-
{
email {$ACME_EMAIL}
}
# Tailscale
(tailscale) {
tls {
get_certificate tailscale
}
}
node.{$TAILNET} {
import tailscale
reverse_proxy container:port
}
caddy_docker_extra_volumes:
- /var/run/tailscale/tailscaled.sock:/var/run/tailscale/tailscaled.sock
caddy_docker_environment_variables:
ACME_EMAIL: [email protected]
TAILNET: domain-alias.ts.net
pre_tasks:
- name: aptキャッシュの更新
ansible.builtin.apt:
update_cache: true
roles:
- geerlingguy.pip
- geerlingguy.docker
- artis3n.tailscale
- dbrennand.caddy_docker
モレキュールテスト 🧪
ロールをテストするには、モレキュールを使用します: molecule test
ライセンス
このプロジェクトはMITライセンスの下でライセンスされています - 詳細はLICENSEを参照してください。
著者と貢献者
dbrennand - 著者