一个用于安全编辑和管理 Caddy Caddyfile 配置的强大 CLI 工具。
✅ DNS Challenge 配置 - 支持 AliDNS 和 Cloudflare DNS Challenge 用于 ACME 证书申请
✅ HTTPS 站点配置 - 在自定义端口上配置 HTTPS 站点
✅ 静态站点 - 配置静态文件服务,包含路径验证和权限检查
✅ 反向代理 - 支持多个上游和负载均衡(round_robin, least_conn, ip_hash)
✅ 守护进程管理 - 通过 start/stop 命令管理 Caddy 进程
✅ Layer4 协议转发 - 支持 TCP/UDP 流量转发(基于 Caddy L4 模块)
✅ 自动验证 - 每次修改后自动验证 Caddyfile 正确性
# 克隆仓库
git clone https://github.com/yourusername/CaddyHelper.git
cd CaddyHelper
# 构建发布版本
cargo build --release
# 二进制文件位于 target/release/CaddyHelper
构建后的可执行文件: target\release\CaddyHelper.exe
构建后的可执行文件: target/release/CaddyHelper
# 为特定域名配置 (site-specific)
CaddyHelper dns alidns \
--domain example.com \
--access-key-id your_access_key \
--access-key-secret your_secret
# 全局配置
CaddyHelper dns alidns \
--domain example.com \
--access-key-id your_access_key \
--access-key-secret your_secret \
--global
# 使用环境变量
export ALIYUN_ACCESS_KEY_ID=your_access_key
export ALIYUN_ACCESS_KEY_SECRET=your_secret
CaddyHelper dns alidns --domain example.com
# 为特定域名配置
CaddyHelper dns cloudflare \
--domain example.com \
--api-token your_cf_token
# 全局配置
CaddyHelper dns cloudflare \
--domain example.com \
--api-token your_cf_token \
--global
# 使用环境变量
export CF_API_TOKEN=your_token
CaddyHelper dns cloudflare --domain example.com
# 在默认 443 端口
CaddyHelper site static \
--domain blog.example.com \
--root /var/www/html
# 在自定义端口
CaddyHelper site static \
--domain blog.example.com \
--port 8443 \
--root /var/www/html
# 单个上游
CaddyHelper site proxy \
--domain api.example.com \
--upstream 127.0.0.1:8080
# 多个上游,使用 round_robin (默认)
CaddyHelper site proxy \
--domain api.example.com \
--upstream 192.168.1.10:8080 \
--upstream 192.168.1.11:8080 \
--upstream 192.168.1.12:8080
# 使用 least_conn 负载均衡
CaddyHelper site proxy \
--domain api.example.com \
--upstream 192.168.1.10:8080 \
--upstream 192.168.1.11:8080 \
--lb-policy least_conn
# 使用 ip_hash 负载均衡
CaddyHelper site proxy \
--domain api.example.com \
--upstream 192.168.1.10:8080 \
--upstream 192.168.1.11:8080 \
--lb-policy ip_hash
# 自定义端口
CaddyHelper site proxy \
--domain api.example.com \
--port 8443 \
--upstream 127.0.0.1:8080
# 单个上游
CaddyHelper layer4 tcp \
--listen 0.0.0.0:3306 \
--upstream 192.168.1.100:3306
# 多个上游(自动负载均衡)
CaddyHelper layer4 tcp \
--listen 0.0.0.0:3306 \
--upstream 192.168.1.100:3306 \
--upstream 192.168.1.101:3306
# DNS 转发示例
CaddyHelper layer4 udp \
--listen 0.0.0.0:53 \
--upstream 8.8.8.8:53 \
--upstream 8.8.4.4:53
# 启动 Caddy 守护进程
CaddyHelper start
# 使用自定义配置文件
CaddyHelper start --config /path/to/Caddyfile
# 指定 Caddy 可执行文件路径
CaddyHelper start --caddy-path /usr/local/bin/caddy
# 停止 Caddy 守护进程
CaddyHelper stop
# 验证 Caddyfile
CaddyHelper validate
# 验证自定义配置文件
CaddyHelper validate --config /path/to/Caddyfile
# 使用特定 Caddy 可执行文件验证
CaddyHelper validate --config Caddyfile --caddy-path ./caddy
CaddyHelper 维护两个文件:
每次运行命令后:
caddyhelper.jsonCaddyfilecaddy validate 自动验证生成的配置%APPDATA%\CaddyHelper\caddyhelper.pid/run/caddy/CaddyHelper/caddyhelper.pid守护进程互斥检查确保同一时间只有一个 Caddy 实例运行。
{ # Global DNS configuration acme_dns alidns { access_key_id {env.ALIYUN_ACCESS_KEY_ID} access_key_secret {env.ALIYUN_ACCESS_KEY_SECRET} } layer4 { 0.0.0.0:3306 { route { proxy 192.168.1.100:3306 192.168.1.101:3306 } } } } example.com { root * /var/www/html file_server } api.example.com { reverse_proxy { lb_policy least_conn to 192.168.1.10:8080 to 192.168.1.11:8080 to 192.168.1.12:8080 } } secure.example.com:8443 { tls { dns cloudflare {env.CF_API_TOKEN} } reverse_proxy 127.0.0.1:8080 }
CaddyHelper 支持通过环境变量传递敏感信息:
# AliDNS
export ALIYUN_ACCESS_KEY_ID=your_key
export ALIYUN_ACCESS_KEY_SECRET=your_secret
# Cloudflare
export CF_API_TOKEN=your_token
# 然后直接使用命令,无需传递凭证
CaddyHelper dns alidns --domain example.com
CaddyHelper dns cloudflare --domain example.com
CaddyHelper 会自动在以下位置搜索 Caddy 可执行文件:
Windows:
caddy.execaddy_windows_amd64_custom.exe.\bin\caddy_windows_amd64_custom.exeC:\Program Files\Caddy\caddy.exeLinux:
caddy./caddy./bin/caddy_linux_amd64_custom/usr/local/bin/caddy/usr/bin/caddy你也可以通过 --caddy-path 参数手动指定路径。
使用 RUST_LOG 环境变量控制日志级别:
# 调试模式
RUST_LOG=debug CaddyHelper site static --domain example.com --root /var/www
# 仅显示信息
RUST_LOG=info CaddyHelper start
# 详细日志
RUST_LOG=trace CaddyHelper validate
CaddyHelper 提供完整的 systemd 服务配置,适用于生产环境。
# 1. 进入 systemd 目录
cd systemd
# 2. 运行自动安装脚本
sudo bash install.sh /path/to/caddy
# 3. 服务会自动启动并设置开机自启
# 1. 创建用户和目录
sudo groupadd --system caddy
sudo useradd --system --gid caddy --home-dir /var/lib/caddy caddy
sudo mkdir -p /etc/caddy /var/lib/caddy /var/log/caddy
# 2. 安装 Caddy 二进制
sudo cp caddy /usr/local/bin/
sudo setcap 'cap_net_bind_service=+ep' /usr/local/bin/caddy
# 3. 复制配置和服务文件
sudo cp Caddyfile /etc/caddy/
sudo cp systemd/caddy-secure.service /etc/systemd/system/caddy.service
# 4. 启动服务
sudo systemctl daemon-reload
sudo systemctl enable caddy
sudo systemctl start caddy
# 启动服务
sudo systemctl start caddy
# 停止服务
sudo systemctl stop caddy
# 重启服务
sudo systemctl restart caddy
# 平滑重载配置(零停机)
sudo systemctl reload caddy
# 查看状态
sudo systemctl status caddy
# 查看日志
sudo journalctl -u caddy -f
# 开机自启
sudo systemctl enable caddy
# 1. 使用 CaddyHelper 修改配置
CaddyHelper site proxy --domain api.example.com --upstream 127.0.0.1:8080
# 2. 验证配置
CaddyHelper validate
# 3. 复制到系统目录
sudo cp Caddyfile /etc/caddy/Caddyfile
# 4. 平滑重载(无需停机)
sudo systemctl reload caddy
| 特性 | CaddyHelper (start/stop) | systemd |
|---|---|---|
| 适用场景 | 开发、测试 | 生产环境 |
| 进程管理 | 手动 | 自动守护 |
| 开机自启 | ✗ | ✓ |
| 日志管理 | 文件 | journald |
| 自动重启 | ✗ | ✓ |
| 权限隔离 | 当前用户 | 专用用户 |
建议:
CaddyHelper start/stop,快速迭代详细文档请参阅 systemd/README.md
如果 Caddyfile 验证失败:
Caddyfile 内容caddy validate --config Caddyfile 查看详细错误如果无法启动或停止守护进程:
Windows:
# 检查 PID 文件 cat $env:APPDATA\CaddyHelper\caddyhelper.pid # 手动清理 del $env:APPDATA\CaddyHelper\caddyhelper.pid
Linux:
# 检查 PID 文件
cat /run/caddy/CaddyHelper/caddyhelper.pid
# 手动清理
sudo rm /run/caddy/CaddyHelper/caddyhelper.pid
Linux:
sudo setcap CAP_NET_BIND_SERVICE=+eip /path/to/caddy
Windows:
dns.providers.alidns (用于 AliDNS)dns.providers.cloudflare (用于 Cloudflare)layer4 (用于 Layer4 转发)xcaddy build \ --with github.com/caddy-dns/alidns \ --with github.com/caddy-dns/cloudflare \ --with github.com/mholt/caddy-l4
CaddyHelper/ ├── src/ │ ├── main.rs # 入口点和命令处理 │ ├── cli.rs # CLI 参数定义 │ ├── config.rs # 配置结构和 Caddyfile 生成 │ ├── daemon.rs # 守护进程管理 │ ├── error.rs # 错误类型定义 │ ├── layer4.rs # Layer4 配置 │ ├── site.rs # 站点配置和验证 │ └── validator.rs # Caddyfile 验证 ├── Cargo.toml └── README.md
欢迎贡献! 请随时提交 Pull Request。
本项目基于 MIT 许可证开源。