dbrennand.caddy_docker

Ansibleロール: dbrennand.caddy_docker

Ansible-Lint Molecule Ansible-Release

このAnsibleロールは、Dockerコンテナ内にCaddyをデプロイするためのものです。

必要条件

ロール変数

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_networkscaddy_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レコードを作成する必要があります:

  1. Cloudflareのダッシュボードプロファイルページに移動します。

  2. 左側でAPIトークン > トークンの作成を選択します。

  3. Edit zone DNSというAPIトークンテンプレートを選択します。

  4. トークン名を好きなように変更します。

  5. 権限の下で**+ 追加**を選択し、権限 Zone / Zone / Readを追加します。

  6. ゾーンリソースの下でゾーンを含めます: Include / Specific zone / example.tld

  7. オプション - 必要に応じてクライアントIPアドレスフィルタリングを構成します。

  8. サマリーに進むをクリックしてトークンを作成します。

- 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用にMagicDNSHTTPS証明書機能が有効になっている必要があります。

- 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 - 著者

プロジェクトについて

Deploy Caddy in a Docker container

インストール
ansible-galaxy install dbrennand.caddy_docker
ライセンス
mit
ダウンロード
2.7k
所有者
Automating stuff @Dell