dbrennand.caddy_docker

Ansible角色:dbrennand.caddy_docker

Ansible-Lint Molecule Ansible-Release

Ansible角色用于在Docker容器中部署Caddy

需求

角色变量

caddy_docker_state: present

管理由此角色部署的资源状态。设置为absent将删除Caddy目录(数据和配置)、Caddyfile、Docker网络、镜像和容器。

caddy_docker_config_directory:
  path: ~/.config/caddy/
  # 可选
  # owner: 所有者
  # 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
# 使用lookup插件
# 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网络模式。设置此变量为host时,caddy_docker_networkscaddy_docker_portscaddy_docker_exposed_ports变量将无效。

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挑战

此示例使用Caddy的Cloudflare模块从Let's Encrypt为Cloudflare管理的域获取证书(包括通配符)。当您希望在不向互联网公开80端口(HTTP)的情况下获取证书时,这非常有用。

必须生成一个API令牌,以便Caddy能够认证Cloudflare API,并为DNS-01挑战创建一个TXT记录:

  1. 转到Cloudflare仪表板个人主页

  2. 在左侧选择API令牌 > 创建令牌

  3. 选择名为编辑区域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获取证书,用于您的Tailscale节点。您必须为您的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测试 🧪

要测试角色,请使用molecule:molecule test

许可证

该项目根据MIT许可进行许可 - 有关详细信息,请参见许可证

作者及贡献者

dbrennand - 作者

关于项目

Deploy Caddy in a Docker container

安装
ansible-galaxy install dbrennand.caddy_docker
许可证
mit
下载
2.7k
拥有者
Automating stuff @Dell