基于 Caddy 的静态博客一键部署方案,自动 HTTPS,零配置证书管理。
相比 Nginx,Caddy 提供:
- 零配置 HTTPS - 自动获取和续期 Let's Encrypt 证书
- 无需 certbot - 内置证书管理,无需额外工具
- 无需 cron - 自动续期,无需手动配置定时任务
- 现代协议 - 开箱即用的 HTTP/2 和 HTTP/3
- 配置简单 - Caddyfile 语法比 nginx.conf 更简洁
- 自动重载 - 配置更改后自动生效
git clone https://github.com/geekspeng/blog-nginx.git
cd blog-nginxcp .env.example .env
vi .env编辑 .env 文件,配置您的域名和邮箱:
DOMAIN=your-domain.com
EMAIL=your-email@example.com
WEB_ROOT=/var/www/htmlchmod +x deploy-caddy.sh
./deploy-caddy.sh脚本会自动完成以下操作:
- 检测操作系统并安装 Caddy
- 自动配置 HTTPS(无需手动申请证书)
- 部署静态网站
- 配置防火墙规则
| 系统 | 状态 |
|---|---|
| Ubuntu / Debian | ✅ |
| CentOS / RHEL / Fedora | ✅ |
| 阿里云龙蜥 | ✅ |
| 腾讯云 OpenCloudOS | ✅ |
| 华为 openEuler | ✅ |
| 麒麟 | ✅ |
| 统信 UOS | ✅ |
blog-nginx/
├── deploy-caddy.sh # Caddy 部署脚本
├── .env.example # 环境变量示例
├── cert/ # SSL 证书目录(可选)
└── html/ # 静态网页目录
└── index.html # 网站首页
# 查看 Caddy 状态
sudo systemctl status caddy
# 重启 Caddy
sudo systemctl restart caddy
# 重载 Caddy 配置
sudo systemctl reload caddy
# 查看 Caddy 日志
sudo journalctl -u caddy -f
# 验证 Caddyfile
sudo caddy validate --config /etc/caddy/Caddyfile# 编辑 Caddyfile
sudo vi /etc/caddy/Caddyfile
# 验证配置
sudo caddy validate --config /etc/caddy/Caddyfile
# 重载配置
sudo systemctl reload caddy默认配置文件位置:/etc/caddy/Caddyfile
your-domain.com {
# 自动 HTTPS
tls your@email.com
# 网站根目录
root * /var/www/html
# 文件服务器
file_server browse
# 编码压缩
encode gzip zstd
# 安全头部
header {
Strict-Transport-Security "max-age=31536000"
X-Frame-Options "SAMEORIGIN"
X-Content-Type-Options "nosniff"
}
}
Caddy 自动处理证书的申请和续期,无需手动干预。
证书位置: /var/lib/caddy/certificates
特性:
- 启动时自动申请证书
- 自动续期(在证书到期前)
- 无需配置 cron 任务
- 支持多个域名和 SANs
查看证书信息:
# 证书由 Caddy 自动管理,通常不需要手动操作
# 如需查看,可检查证书目录
sudo ls -la /var/lib/caddy/certificates/部署脚本会自动配置防火墙规则。如果需要手动配置:
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reloadsudo ufw allow 'Caddy'
# 或
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp- 首次部署前,请确保域名 DNS 已正确解析到服务器 IP
- 80 和 443 端口需要对外开放
- 证书会自动申请,无需手动配置 certbot
- 更换域名后,Caddy 会自动为新域名申请证书
- 如有多个域名,可在 Caddyfile 中添加多个站点块
# 检查 Caddy 状态
sudo systemctl status caddy
# 验证配置文件
sudo caddy validate --config /etc/caddy/Caddyfile
# 查看详细日志
sudo journalctl -u caddy -n 50 --no-pager
# 检查端口监听
sudo netstat -tlnp | grep caddy检查域名解析:
# 检查域名是否正确解析
ping your-domain.com
nslookup your-domain.com检查端口占用:
sudo netstat -tlnp | grep :80
sudo netstat -tlnp | grep :443停止冲突服务:
# 如果有其他服务占用 80/443 端口
sudo systemctl stop nginx # 停止 Nginx
sudo systemctl stop apache2 # 停止 Apache# 修复网站文件权限
sudo chown -R caddy:caddy /var/www/html
sudo chmod -R 755 /var/www/html# Caddy 系统日志
sudo journalctl -u caddy -f
# 访问日志(如果配置了文件输出)
sudo tail -f /var/log/caddy/*.log# 停止服务
sudo systemctl stop caddy
sudo systemctl disable caddy
# 卸载 Caddy
# Ubuntu/Debian
sudo apt-get remove caddy
# CentOS/RHEL/国产系统
sudo dnf remove caddy
# 或
sudo yum remove caddy
# 删除配置文件(可选)
sudo rm -rf /etc/caddy
sudo rm -rf /var/lib/caddy在 /etc/caddy/Caddyfile 中添加多个站点:
site1.com {
root * /var/www/site1
file_server
}
site2.com {
root * /var/www/site2
file_server
}
your-domain.com {
# 前端静态文件
root * /var/www/html
file_server
# API 反向代理
handle /api/* {
reverse_proxy localhost:5000
}
}
Caddy 默认自动启用 HTTPS,HTTP 请求会自动重定向。如需自定义:
http://your-domain.com {
redir https://your-domain.com{uri} permanent
}
https://your-domain.com {
# ... 你的配置
}
MIT