背景
- 笔者的博客是通过 vitepress 搭建并通过 gitActions 免费部署至 gitHub Pages 的, 同时申请了自己的域名作为自定义域名解析至 gitHub Pages。 故没有自己的云主机(以前有,后面没续费),所以使用了七牛云作为图床, 因为博客接入了 https,所以需要一个免费的 SSL 证书。以前使用的是域名商自带的免费一年 SSL 证书,最近过期想重新申请时发现现在免费证书最多只能申请 3 个月的了,想到每隔 3 个月都要换一次,觉得有点麻烦,故有了这篇文章。
步骤分析
- 利用
acme.sh
自动申请免费 SSL 证书,因为域名是通过腾讯云解析的(其他厂商同理)。这里参考腾讯云的文档,acme.sh 自动解析并申请证书。 - 申请成功后,我需要将证书部署至七牛云用来做图床域名,这里参考acme的部署文档.
- 将部署任务自动化,因为没有云主机,所以这里将脚本通过 Mac 的定时任务实现,这里参考Mac 定时任务。
- 自动替换最新证书,域名API文档。
步骤实现
下载
acme.sh
脚本shellcurl https://get.acme.sh | sh -s email=my@example.com // 你的邮箱
生成证书
shellexport Tencent_SecretId="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" export Tencent_SecretKey="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" acme.sh --issue --dns dns_tencent -d example.com -d *.example.com
编写
acmedepoly.sh
部署证书至七牛云bash#!/bin/bash export QINIU_AK="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" export QINIU_SK="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # 如果需要多个域名则需要加上QINIU_CDN_DOMAIN,注意域名前面的点 export QINIU_CDN_DOMAIN=".example.com" ~/.acme.sh/acme.sh --deploy -d example.com --deploy-hook qiniu
部署任务自动化
Mac 定时任务
4.1 新建任务脚本
shellvi ~/Library/LaunchAgents/com.user.acmedepoly.sh.plist
4.2 编写任务脚本
xml<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <!-- 任务唯一标识 --> <key>Label</key> <string>com.user.acmedepoly.sh</string> <!-- 设置执行间隔(88天 = 88*24*60*60秒) --> <key>StartInterval</key> <integer>7603200</integer> <!-- 指定要运行的脚本路径 --> <key>ProgramArguments</key> <array> <string>/bin/bash</string> <string>/path/to/acmedepoly.sh</string> </array> <!-- 输出日志(可选) --> <key>StandardOutPath</key> <string>/tmp/acmedepolysh.log</string> <key>StandardErrorPath</key> <string>/tmp/acmedepolysh-error.log</string> </dict> </plist>
4.3 加载并启动任务
shell# 加载任务 launchctl load ~/Library/LaunchAgents/com.user.acmedepoly.sh.plist # 启动任务 launchctl start com.user.acmedepoly.sh
TODO: 自动替换域名证书