你是在 docker 里运行 acme.sh 的吧。我的操作方式是 volume 挂接的方式,将证书目录同时挂接到 acme.sh 容器和证书使用容器。在宿主机的 crontab 里写一个定时任务运行 acme_update.sh 。
acme_update.sh 的流程是:
(1) docker 运行 acme 更新证书,如果证书被更新会在 pending 目录里 touch 一个.sh 空文件做标记
(2) 宿主机检查 pending 目录是是否存在.sh 文件,如果有的话,运行在 prog 目录下的同名文件
(3) 删除 pending 目录下的.sh 文件
通过第二步,在证书更新后能 restart 对应容器或者让容器 reload 配置。因为是检查 pending 目录的文件,但是运行 prog 目录下的同名文件,prog 目录没有挂接到容器里,所以比较安全。
然后在宿主机上写一个 alias ,类似如下:
alias acme.sh="docker run --rm -v /docker/acme/pending:/acme/pending -v /docker/acme/acme.sh:/acme.sh -v /var/cert:/var/cert neilpang/acme.sh"
(文件认证模式需要加上 web 目录的 volume ,dns 认证第一次需要加上环境变量,之后可以删除掉)
将来使用的时候,就是直接 acme.sh 操作,使用也很方便。acme_update.sh 可以让 gpt/claude 写一下。 |