集成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文件。
来自真实用户的反馈,见证轩辕镜像的优质服务
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像加速服务
在 Docker Desktop 配置镜像加速
Docker Compose 项目配置加速
Kubernetes 集群配置 Containerd
在宝塔面板一键配置镜像加速
Synology 群晖 NAS 配置加速
飞牛 fnOS 系统配置镜像加速
极空间 NAS 系统配置加速服务
爱快 iKuai 路由系统配置加速
绿联 NAS 系统配置镜像加速
QNAP 威联通 NAS 配置加速
Podman 容器引擎配置加速
HPC 科学计算容器配置加速
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名加速
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429