🔐 证书服务器自动续期 & 日志清理全记录
适用环境:hi3798mv100(ARM 32 位,ARMv7l)
证书域名:*.manv.cn+manv.cn
签发机构:Let's Encrypt(通过 lego + 腾讯云 DNS-01 验证)
最后更新:2026-08-09
一、前置准备:SSH 免密登录
目标:让证书服务器e.manv.cn能 免密码 登录博客服务器y.manv.cn,方便后续自动同步证书。
① 在证书服务器 e.manv.cn 上生成 SSH 密钥
ssh-keygen -t ed25519
# 一路回车即可,默认生成 ~/.ssh/id_ed25519 和 id_ed25519.pub② 把公钥拷贝到博客服务器 y.manv.cn
# 在 e.manv.cn 上执行
ssh-copy-id root@<y.manv.cn的真实IPv4>③ 测试免密是否生效
ssh root@<y.manv.cn的真实IPv4>✅ 不用输密码直接登录 = 配置成功
二、安装 lego(注意 ARM 架构别下错)
hi3798mv100 是 ARM 32 位,需要下载 lego_linux_armv6 那个包(armv6 通吃 armv7l):
# 下载(请替换为实际最新版本号)
wget https://github.com/go-acme/lego/releases/download/v4.xx.x/lego_v4.xx.x_linux_armv6.tar.gz
# 解压
tar xzf lego_v4.xx.x_linux_armv6.tar.gz
# 放到系统路径
cp lego /usr/local/bin/
# 验证
lego --version⚠️ 常见坑:下成arm64或amd64会在运行时报Exec format error,务必确认是armv6。
三、首次签发证书
3.1 设置腾讯云 API 密钥
export TENCENTCLOUD_SECRET_ID=<你的腾讯云SecretId>
export TENCENTCLOUD_SECRET_KEY=<你的腾讯云SecretKey>3.2 执行签发
lego --email 5567374@qq.com --dns tencentcloud \
-d '*.manv.cn' -d 'manv.cn' run💡 为什么要加-d manv.cn?
单纯*.manv.cn管不了根域manv.cn本身。加上这一条,根域 + 泛域名会签进 同一张证书,一张证书全搞定。
3.3 签发完成后证书位置
./.lego/certificates/
├── _.manv.cn.crt # 证书(含完整链)
├── _.manv.cn.key # 私钥
└── manv.cn.json # 账户/订单信息证书路径取决于你当时--path参数,没指定就在当前目录的.lego/下。
四、配置 Nginx 使用证书
server {
listen 443 ssl;
server_name manv.cn *.manv.cn;
ssl_certificate /etc/nginx/ssl/manv.cn/fullchain.crt; # 即 _.manv.cn.crt
ssl_certificate_key /etc/nginx/ssl/manv.cn/manv.cn.key;
# 推荐补充的安全配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
}五、自动续期(重点!别忘了这步)
Let's Encrypt 证书 90 天过期,lego 自带 renew 命令,配合 crontab 即可实现全自动续期,无需重跑 run。
5.1 续期命令
lego --email 5567374@qq.com --dns tencentcloud \
-d '*.manv.cn' -d 'manv.cn' \
renew --days 30 --reuse-key--days 30:距过期不足 30 天才执行续期;--reuse-key:复用旧私钥,减少风险。
5.2 写成一键脚本(推荐)
文件:/opt/lego/renew-manv.sh
#!/bin/bash
# ============================================================
# manv.cn 证书自动续期脚本
# ============================================================
export TENCENTCLOUD_SECRET_ID=<你的腾讯云SecretId>
export TENCENTCLOUD_SECRET_KEY=<你的腾讯云SecretKey>
LEGO=/usr/local/bin/lego
CERT_DIR=/opt/lego/.lego/certificates
NGINX_CERT=/etc/nginx/ssl/manv.cn
# 执行续期
$LEGO --email 5567374@qq.com --dns tencentcloud \
-d '*.manv.cn' -d 'manv.cn' \
renew --days 30 --reuse-key
# 续期成功才覆盖旧证书 + reload nginx
if [ $? -eq 0 ]; then
cp "$CERT_DIR/_.manv.cn.crt" "$NGINX_CERT/fullchain.crt"
cp "$CERT_DIR/_.manv.cn.key" "$NGINX_CERT/manv.cn.key"
nginx -s reload
echo "[$(date)] 证书续期成功,nginx 已 reload"
else
echo "[$(date)] 证书续期失败,请检查日志"
fi赋执行权限:
chmod +x /opt/lego/renew-manv.sh5.3 加入 crontab
crontab -e添加以下行:
0 2 * * * /opt/lego/renew-manv.sh >> /var/log/lego-renew.log 2>&1效果:每天凌晨 2 点检查一次 → 距过期 >30 天就啥也不干 → <30 天自动续签 + 拷证书 + reload nginx。
六、清理日志(可选)
如果证书目录或日志文件膨胀,可定期清理:
# 清理 lego 旧日志(保留最近 7 天)
find /var/log/lego* -type f -mtime +7 -delete
# 清理 .lego 下的临时文件
find /opt/lego/.lego -type f -name "*.tmp" -delete📋 速查清单
| 步骤 | 关键命令 | 状态 |
|---|---|---|
| ① SSH 免密 | ssh-copy-id root@y.manv.cn | ⬜ |
| ② 安装 lego | cp lego /usr/local/bin/ | ⬜ |
| ③ 首次签发 | lego ... run | ⬜ |
| ④ Nginx 配置 | ssl_certificate ... | ⬜ |
| ⑤ 续期脚本 | /opt/lego/renew-manv.sh | ⬜ |
| ⑥ Crontab | 0 2 * * * ... | ⬜ |
🔒 安全提醒:脚本里的TENCENTCLOUD_SECRET_KEY是敏感信息,建议将脚本权限设为chmod 700,避免被其他用户读取。
评论 (0)