
caddybuilds/caddy-cloudflare集成Cloudflare DNS-01 ACME验证的完整Caddy Docker镜像
部署轻松无忧的Caddy服务器,内置支持Cloudflare DNS-01 ACME挑战。简化SSL证书管理,确保服务器无需手动更新即可保持安全,是一种轻松可靠的解决方案。
amd64、arm64、arm/v7(树莓派)、ppc64le和s390x,确保在广泛设备和系统上的兼容性。要使用预构建的Docker镜像,从GitHub容器注册表或Docker Hub拉取:
shdocker pull ghcr.io/caddybuilds/caddy-cloudflare:latest docker pull caddybuilds/caddy-cloudflare:latest # alpine版本 docker pull ghcr.io/caddybuilds/caddy-cloudflare:alpine docker pull caddybuilds/caddy-cloudflare:alpine
可在Docker设置中使用该镜像。以下是示例docker-compose.yml文件:
yamlversion: "3.7" services: caddy: image: caddybuilds/caddy-cloudflare:latest restart: unless-stopped cap_add: - NET_ADMIN ports: - "80:80" - "443:443" - "443:443/udp" volumes: - $PWD/Caddyfile:/etc/caddy/Caddyfile - $PWD/site:/srv - caddy_data:/data - caddy_config:/config environment: - CLOUDFLARE_API_TOKEN=your_cloudflare_api_token volumes: caddy_data: external: true caddy_config:
将数据卷定义为外部卷可确保docker-compose down不会删除该卷。可能需要使用docker volume create caddy_data手动创建它。
将your_cloudflare_api_token替换为实际的Cloudflare API令牌。
以下是一个示例Caddyfile配置,帮助您快速入门。此配置设置ACME DNS挑战提供程序以使用Cloudflare,并提供简单的静态网站服务。
在此配置中,ACME DNS挑战提供程序设置为全局,因此适用于Caddy提供的所有站点。
# 要使用您自己的域名(带自动HTTPS),首先确保您的域名A/AAAA DNS记录正确指向 # 此机器的公网IP,然后将下面的"example.com"替换为您的域名。 { # 设置ACME DNS挑战提供程序为Cloudflare,适用于所有站点 acme_dns cloudflare {env.CLOUDFLARE_API_TOKEN} } example.com { # 设置此路径为您的网站目录。 root * /usr/share/caddy # 启用静态文件服务器。 file_server # 另一个常见任务是设置反向代理: # reverse_proxy localhost:8080 # 或通过php-fpm提供PHP网站: # php_fastcgi localhost:9000 encode gzip tls { # 无需在此处指定dns,已全局设置 } } another-example.com { root * /usr/share/caddy file_server encode gzip tls { # 无需在此处指定dns,已全局设置 } }
example.com { # 设置此路径为您的网站目录。 root * /usr/share/caddy # 启用静态文件服务器。 file_server # 另一个常见任务是设置反向代理: # reverse_proxy localhost:8080 # 或通过php-fpm提供PHP网站: # php_fastcgi localhost:9000 encode gzip tls { dns cloudflare {env.CLOUDFLARE_API_TOKEN} } } another-example.com { root * /usr/share/caddy file_server encode gzip tls { dns cloudflare {env.CLOUDFLARE_API_TOKEN} } }
要使用Cloudflare DNS挑战提供程序,需要在Cloudflare账户中创建API令牌。按照以下步骤创建具有必要权限的令牌:
登录Cloudflare:
导航到API令牌:
创建自定义令牌:
配置令牌权限:
指定账户和区域资源:
创建并存储令牌:
设置环境变量:
CLOUDFLARE_API_TOKEN设置为刚创建的令牌值。例如,在Docker环境中,可在docker-compose.yml文件中设置此环境变量:
yamlversion: "3.7" services: caddy: image: caddybuilds/caddy-cloudflare:latest restart: unless-stopped cap_add: - NET_ADMIN ports: - "80:80" - "443:443" - "443:443/udp" volumes: - $PWD/Caddyfile:/etc/caddy/Caddyfile - $PWD/site:/srv - caddy_data:/data - caddy_config:/config environment: - CLOUDFLARE_API_TOKEN=your_cloudflare_api_token volumes: caddy_data: external: true caddy_config:
将数据卷定义为外部卷可确保docker-compose down不会删除该卷。可能需要使用docker volume create caddy_data手动创建它。
将your_cloudflare_api_token替换为实际的Cloudflare API令牌。
要为所有ACME事务配置ACME DNS挑战提供程序,将以下内容添加到您的Caddyfile:
{ acme_dns cloudflare {env.CLOUDFLARE_API_TOKEN} }
此配置设置提供程序使用Cloudflare DNS模块,并使用环境变量提供的API令牌。它确保Caddy服务器可以使用DNS-01挑战自动颁发和续期SSL证书。
此设置与在tls指令的ACME颁发者配置中指定提供程序相同。
示例Caddyfile
GitHub容器注册表和Docker Hub上的caddy-cloudflare镜像提供以下标签:
latest:
<version>:
2.7.6:Caddy 2.7.6版本的完整版本标签,确保使用此确切版本。
(例如:docker pull ghcr.io/caddybuilds/caddy-cloudflare:2.8.0)
2.7:2.7系列中最新补丁版本的次要版本标签,允许次要更新而不破坏兼容性。
2:2.x系列中最新版本的主要版本标签,在保持兼容性的同时提供主要版本内的更新。
alpine:始终指向基于Alpine的镜像的最新稳定版本。
<version>-alpine:基于Alpine的镜像的特定版本标签(例如2.7.6-alpine)。caddybuilds/caddy-cloudflare镜像支持多种平台,确保在广泛设备和系统上的兼容性。支持的平台包括:
基于Alpine的镜像提供轻量级替代方案,基于流行的Alpine Linux项目。Alpine Linux比大多数发行版基础镜像小得多(约5MB),通常会产生更精简的镜像。
要使用基于Alpine的镜像,从GitHub容器注册表或Docker Hub拉取:
shdocker pull ghcr.io/caddybuilds/caddy-cloudflare:alpine docker pull caddybuilds/caddy-cloudflare:alpine
此Docker镜像针对树莓派进行了优化,允许在这些流行的单板计算机上部署带有Cloudflare DNS集成的Caddy。无论使用树莓派3还是最新的树莓派4,此镜像都提供无缝运行所需的支持。
要在树莓派上使用镜像,请确保运行兼容的操作系统(如Raspberry Pi OS)并安装了Docker。然后可以像在其他系统上一样拉取并运行镜像:
shdocker pull ghcr.io/caddybuilds/caddy-cloudflare:latest
如果您希望构建自己的Docker镜像,请按照以下步骤操作:
GITHUB_TOKEN(在GitHub Actions中自动可用)DOCKERHUB_USERNAME(可选,如果要推送到DockerHub)DOCKERHUB_TOKEN(可选,如果要推送到DockerHub)分叉此仓库 到您的GitHub账户。
克隆分叉的仓库到本地机器:
shgit clone [***] cd caddy-cloudflare
设置GitHub Secrets:
GITHUB_TOKEN:在GitHub Actions中自动可用。DOCKERHUB_USERNAME:您的DockerHub用户名(可选)。DOCKERHUB_TOKEN:您的DockerHub访问令牌(可选)。自定义工作流(如果需要):
.github/workflows/check-caddy-release.yml配置为检查Caddy新版本并构建Docker镜像。您可以根据需要自定义计划或工作流的任何其他部分。提交并推送任何更改(如果进行了自定义):
shgit add . git commit -m "自定义工作流" git push origin main
手动触发工作流(可选):
监控工作流:
Docker镜像:
shdocker pull ghcr.io/YOUR_GITHUB_USERNAME/caddy-cloudflare:latest
您可以在项目中使用构建的Docker镜像。以下是如何在docker-compose.yml文件中使用它的示例:
yamlversion: "3.7" services: caddy: image: ghcr.io/YOUR_GITHUB_USERNAME/caddy-cloudflare:latest restart: unless-stopped cap_add: - NET_ADMIN ports: - "80:80" - "443:443" - "443:443/udp" volumes: - $PWD/Caddyfile:/etc/caddy/Caddyfile - $PWD/site:/srv - caddy_data:/data - caddy_config:/config environment: - CLOUDFLARE_API_TOKEN=your_cloudflare_api_token volumes: caddy_data: external: true caddy_config:
将数据卷定义为外部卷可确保docker-compose down不会删除该卷。您可能需要使用docker volume create caddy_data手动创建它。
将YOUR_GITHUB_USERNAME替换为您的GitHub用户名,your_cloudflare_api_token替换为您的实际Cloudflare API令牌。
如果您有任何改进或错误修复,欢迎打开问题或提交拉取请求。
本项目采用MIT许可。详情参见LICENSE文件。





manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务