dbrennand.caddy_docker
Ansible角色:dbrennand.caddy_docker
Ansible角色用于在Docker容器中部署Caddy。
需求
community.docker
Ansible集合:ansible-galaxy collection install community.docker
角色变量
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_networks
、caddy_docker_ports
和caddy_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记录:
在左侧选择API令牌 > 创建令牌。
选择名为编辑区域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获取证书,用于您的Tailscale节点。您必须为您的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测试 🧪
要测试角色,请使用molecule:molecule test
许可证
该项目根据MIT许可进行许可 - 有关详细信息,请参见许可证。
作者及贡献者
dbrennand - 作者