在 Debian 12 上,官方 apt 安装的 Caddy 默认不提供 DNS 校验插件(如 Cloudflare 等)。如果需要使用 DNS 挑战来自动签发通配符证书,理想的方案是:
通过 xcaddy 编译定制的 Caddy 二进制,替换官方包运行路径,同时保留并继承官包所提供的的运行用户、标准数据目录及 systemd 守护进程。
一、安装依赖与 xcaddy
首先更新系统,补全包管理器所需的底层工具并安装 Go 代理编译环境。
1 | # 1. 依赖安装 |
二、编译含 DNS 插件的 Caddy
以编译 Cloudflare DNS 辅助解析插件为例配置底层驱动(如需多挂载比如阿里 DNS,继续空格累加 --with 扩展):
1 | xcaddy build --with github.com/caddy-dns/cloudflare |
编译完成后,运行以下指令确认是否存在编译目标(caddy 二进制与对应模块):
1 | # 验证模块是否打入 |
三、部署 Caddy 官方运行时环境
获取标准的 systemd 服务和目录结构,我们利用官方源将基础框架搭建妥当:
1 | # 导入密钥 |
四、替换二进制并阻止 apt 升级覆盖(核心步骤)
这是最重要的步骤。如果不对包管理机制进行强制声明,随后的每次环境升级操作都会覆盖您的自编译产物。
1. 安全搬运与授权
1 | # 备份官方默认二进制文件 |
2. ⚡ 锁定 APT 包,禁止系统包管理器覆盖自编译程序
因为 /usr/bin/caddy 当前从物理侧覆盖了软件包原路径文件,如果不加上锁定指令,未来任意一次 apt upgrade 都会自动重拉无插件的官方镜像抹除您的插件!
执行以下命令锁死 Caddy 包:
1 | # 告知 apt-mark 锁定 Caddy 将其定格于当前版本状态 |
撤销绑定锁定,可执行:sudo apt-mark unhold caddy。
五、Caddyfile 改动实例(DNS Challege)
编辑配置文件 /etc/caddy/Caddyfile。此时由于自备了 TLS 插件,可以配置泛域名:
1 | *.example.com, example.com { |
六、装载运行与维护命令
1 | # 重新扫描 Systemd 系统变更 |
七、后续自编译升级指南
后续升级定制的 Caddy 同样轻松:
- 带新标志运行
xcaddy build --with...跑编译工程包得到新包。 - 直接无缝覆盖:
sudo cp ./caddy /usr/bin/caddy然后修复权限sudo chown root:root /usr/bin/caddy && sudo chmod 755 /usr/bin/caddy。 - 执行
sudo systemctl restart caddy,不需要解除apt hold标记。