GoProxy-VPS实现自动更新letsencrypt证书
之前写过一篇Letsencrypt手动更新证书,时隔数月之后,终于想要实现自动更新letsencrypt证书。
更改goproxy-vps配置文件
首先goproxy-vps依赖于letsencrypt生成的证书,我之前的配置文件goproxy-vps.toml
内容如下
1 | [[http2]] |
手动更新完letsencrypt证书后,还要将/etc/letsencrypt/live/yourdomain
目录下的cert.pem
以及privkey.pem
的证书内容黏贴到配置文件中的pem
处,非常麻烦。好在goproxy-vps支持直接从文件读取证书,修改一下goproxy-vps.toml
配置文件
1 | [[http2]] |
这样的话,每次证书更新完毕后,不用去黏贴证书内容了,方便了许多。对于实现自动更新letsencrypt证书也同样如此。
使用crontab实现定时更新
如果要实现letsencrypt自动更新,就需要用到crontab来定时执行。letsencrypt的证书有效期为90天,貌似少于30天才给更新,否则letsencrypt会提示你更新无效,这也是对服务器的一种保护。
由于我之前首次生成letsencrypt证书的时候使用的是--standalone
模式,在验证域名的时候需要启用443端口,而我的goproxy-vps占用了该端口,所以不管是自动更新还是手动更新,都需要先停止goproxy-vps的进程。
先查看crontab服务是否开启
1 | service crond status |
如果开启则创建crontab定时任务
1 | crontab -e |
certbot工具支持钩子参数写法
1 | 15 2 * */2 * certbot-auto renew --pre-hook "service goproxy-vps stop" --post-hook "service goproxy-vps start" > /home/youraccount/log.txt |
上面代码中goproxy-vps已经设置成一个服务了。如果没有设置成服务,可以使用绝对路径来执行。certbot-auto
已经放到usr/local/bin
目录下了成为一个全局命令。--pre-hook
这个参数表示执行更新操作之前要做的事情,--post-hook
这个参数表示执行更新操作完成后要做的事情。这条命令的含义是,每隔2个月的02:15分执行一次letsencrypt证书更新。执行日志输出到你的用户名的目录下。
查看刚才创建的crontab定时任务
1 | crontab -l |
总结
目前还没有测试过这段代码,要等两个月后,才能确定是否能正常执行。据我所知,443端口是要在执行certbot前必须关闭的,但是占用80端口的Nginx服务我没有关闭,不知道会不会受影响。主要是--pre-hook
这个钩子参数貌似不支持执行多个命令,官方文档又看着头大,等两个月后就见分晓了。