docs: 记录 systemd timer 证书续期机制

- CLAUDE.md: 添加证书续期机制详解(timer/service/hook)
- README.md: 更新证书续期说明
- CHANGELOG.md: 记录运维变更
This commit is contained in:
gitadmin 2026-07-09 16:15:48 +08:00
parent 7765dbe501
commit 4011fb7951
3 changed files with 70 additions and 8 deletions

View File

@ -25,6 +25,11 @@
- SSL: 配置强加密套件ECDHE+AESGCM/CHACHA20 - SSL: 配置强加密套件ECDHE+AESGCM/CHACHA20
- SSL: 删除不安全的 CloudFlare Origin 证书 - SSL: 删除不安全的 CloudFlare Origin 证书
### 运维
- 证书续期: 创建 deploy hook续期后自动重载 nginx
- 证书续期: 创建 ACME webroot 目录(/var/www/html/.well-known/acme-challenge/
- 文档: 记录 systemd timer 证书续期机制
--- ---
## 2026-07-02 ## 2026-07-02

View File

@ -44,14 +44,60 @@ nginx-proxy-ai 是 tlyq.ai 域名的统一入口,负责:
ssh txjp "docker exec nginx-ai nginx -s reload" ssh txjp "docker exec nginx-ai nginx -s reload"
``` ```
### 证书续期检查 ### 证书续期机制
证书续期通过 **systemd timer** 自动管理,无需人工干预。
#### 工作原理
```
systemd timer (snap.certbot.renew.timer)
↓ 每天 01:30 和 22:32 触发
systemd service (snap.certbot.renew.service)
↓ 执行
certbot renew --timer="00:00~24:00/2"
↓ 续期成功后
deploy hook → docker exec nginx-ai nginx -s reload
```
#### 关键文件
| 组件 | 路径 | 说明 |
|------|------|------|
| Timer | `/etc/systemd/system/snap.certbot.renew.timer` | 定时触发器 |
| Service | `/etc/systemd/system/snap.certbot.renew.service` | 执行续期的服务 |
| Hook | `/etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh` | 续期后重载 nginx |
#### Timer 配置
```ini
[Timer]
OnCalendar=*-*-* 01:30 # 每天 01:30
OnCalendar=*-*-* 22:32 # 每天 22:32
```
每天检查两次,距离到期 < 30 天时自动续期
#### 常用管理命令
```bash ```bash
# 查看定时器状态
ssh txjp "systemctl status snap.certbot.renew.timer"
# 查看下次运行时间
ssh txjp "systemctl list-timers snap.certbot.renew.timer"
# 手动触发续期
ssh txjp "systemctl start snap.certbot.renew.service"
# 查看续期日志
ssh txjp "journalctl -u snap.certbot.renew.service --since '1 hour ago'"
# 检查证书有效期 # 检查证书有效期
ssh txjp "openssl x509 -in /etc/letsencrypt/live/www.tlyq.ai/fullchain.pem -noout -dates" ssh txjp "openssl x509 -in /etc/letsencrypt/live/www.tlyq.ai/fullchain.pem -noout -dates"
# 检查续期定时器 # 测试续期(不实际续期)
ssh txjp "systemctl list-timers | grep certbot" ssh txjp "certbot renew --dry-run"
``` ```
## 文件结构 ## 文件结构

View File

@ -44,16 +44,27 @@ CloudFlare Origin 证书是自签名证书,浏览器不信任,会导致 SSL
### 证书续期 ### 证书续期
Let's Encrypt 证书有效期 90 天,需自动续期: 证书续期通过 **systemd timer** 自动管理每天检查两次01:30 和 22:32距离到期 < 30 天时自动续期
```bash ```bash
# 检查续期定时器 # 查看定时器状态
systemctl list-timers | grep certbot systemctl status snap.certbot.renew.timer
# 手动续期 # 查看下次运行时间
certbot renew --deploy-hook "docker exec nginx-ai nginx -s reload" systemctl list-timers snap.certbot.renew.timer
# 手动触发续期
systemctl start snap.certbot.renew.service
# 查看续期日志
journalctl -u snap.certbot.renew.service --since "1 hour ago"
# 测试续期(不实际续期)
certbot renew --dry-run
``` ```
续期成功后自动执行 deploy hook 重载 nginx无需人工干预。
### 新增站点证书 ### 新增站点证书
1. 使用 certbot 申请证书: 1. 使用 certbot 申请证书: