使用acme.sh获取泛二级域名证书+pve ssl证书自动续签
2024-11-15
1分钟阅读时长
1. 安装 acme.sh
curl https://get.acme.sh | sh -s email=你的邮箱地址
安装完成后,激活环境(必须执行):
source ~/.bashrc
验证安装是否成功:
acme.sh --version
2. 配置 Cloudflare API 凭证
你需要提前在 Cloudflare 后台获取:
CF_Token(API令牌)CF_Zone_ID(域名区域ID)CF_Account_ID(账户ID)CF_EMAIL(Cloudflare登录邮箱)
永久配置环境变量(推荐,一劳永逸)
# 编辑配置文件
vi /etc/profile.d/acme-cloudflare.sh
写入以下内容(替换成你自己的信息):
export CF_Token="你的CF令牌"
export CF_Zone_ID="你的域名区域ID"
export CF_Account_ID="你的账户ID"
export CF_EMAIL="你的Cloudflare邮箱"
激活配置:
source /etc/profile.d/acme-cloudflare.sh
3. 第一次申请证书(全自动)
直接执行命令,无需手动操作DNS,脚本自动添加/删除TXT记录验证:
acme.sh --issue --dns dns_cf -d "home.bitllion.top" --server letsencrypt --force
✅ 执行成功后,会输出证书存放路径。
4. 自动部署证书到 PVE(核心步骤)
PVE 默认证书路径:
- 密钥:
/etc/pve/nodes/pve/pveproxy-ssl.key - 证书链:
/etc/pve/nodes/pve/pveproxy-ssl.pem
执行部署命令:
# 定义路径
LOCAL_KEY="/etc/pve/nodes/pve/pveproxy-ssl.key"
LOCAL_PEM="/etc/pve/nodes/pve/pveproxy-ssl.pem"
# 安装证书并重启PVE面板
acme.sh --install-cert -d home.bitllion.top \
--key-file $LOCAL_KEY \
--fullchain-file $LOCAL_PEM \
--reloadcmd "systemctl restart pveproxy"
执行完成后,刷新PVE网页,证书立即生效。
5. 编写全自动续签脚本(最终版)
创建脚本文件:
vi /opt/pve_ssl_auto_renew.sh
写入最终优化版脚本(你提供的脚本优化后):
#!/bin/bash
# ==================== 配置区域(自行修改) ====================
# Cloudflare 凭证
export CF_Token=xxxx
export CF_Zone_ID=xxxxx
export CF_Account_ID=xxxxx
export CF_EMAIL="xxxxxx"
# PVE 证书路径(固定无需修改)
LOCAL_KEY="/etc/pve/nodes/pve/pveproxy-ssl.key"
LOCAL_PEM="/etc/pve/nodes/pve/pveproxy-ssl.pem"
# 域名
DOMAIN="home.bitllion.top"
# =============================================================
# 自动续签证书
acme.sh --renew --dns dns_cf -d $DOMAIN --server letsencrypt
# 判断是否续签成功
if [ $? -ne 0 ]; then
echo "[$(date)] 证书续签失败!" >> /var/log/pve_ssl_renew.log
exit 1
fi
# 覆盖旧证书
acme.sh --install-cert -d $DOMAIN \
--key-file $LOCAL_KEY \
--fullchain-file $LOCAL_PEM \
--reloadcmd "systemctl restart pveproxy"
echo "[$(date)] PVE 证书自动续签并部署成功!" >> /var/log/pve_ssl_renew.log
赋予执行权限:
chmod +x /root/pve_ssl_auto_renew.sh
手动测试运行:
/root/pve_ssl_auto_renew.sh
6. 设置定时任务(自动续签)
acme.sh 会自动创建每日任务,我们只需要确保脚本能被调用即可。
手动添加定时任务(每天凌晨3点检查续签):
crontab -e
添加一行:
0 3 * * * /opt/pve_ssl_auto_renew.sh > /dev/null 2>&1
查看定时任务:
crontab -l
7. 查看日志(排查问题)
# 查看脚本运行日志
cat /var/log/pve_ssl_renew.log
# 查看acme.sh官方日志
acme.sh --log