前言
之前我域名Let's Encrypt的SSL证书都是在服务器使用acme.sh自动续期的,但是存在一定的问题:
- 多服务器证书同步不方便
- 如果需要添加新的subdomains不方便
所以萌生用pipeline完成全自动更新+部署的想法。
使用pipeline的好处在于,不需要在服务器安装acme.sh、能够方便地部署于多个环境、方便修改配置。
我是直接使用阿里云云效的flow来完成这个能力。
新建一个flow,不用添加代码源,新建一个action,找到执行命令,选择香港构建集群,执行如下内容
wget -O - https://raw.githubusercontent.com/acmesh-official/acme.sh/master/acme.sh | sh -s -- --install-online --force
mkdir -p ./ssl/hunsh.net
/root/.acme.sh/acme.sh --issue --dns dns_dp -d hunsh.net -d *.hunsh.net
/root/.acme.sh/acme.sh --installcert -d hunsh.net --cert-file ./ssl/hunsh.net/hunsh.net.crt --key-file ./ssl/hunsh.net/hunsh.net.key --fullchain-file ./ssl/hunsh.net/hunsh.net.chain.crt
然后添加环境变量,像我这里使用的dnspod的api,所以要添加对应的huanjin之前我域名Let's Encrypt的SSL证书都是在服务器使用acme.sh自动续期的,但是存在一定的问题:
- 多服务器证书同步不方便
- 如果需要添加新的subdomains不方便
所以萌生用pipeline完成全自动更新+部署的想法。
使用pipeline的好处在于,不需要在服务器安装acme.sh、能够方便地部署于多个环境、方便修改配置。
我是直接使用阿里云云效的flow来完成这个能力。Github Action来部署国内主机的话太糟心了,之前一个golang的构建,15m传了40分钟,云效有香港和北京两个集群,通常我们可以使用香港集群进行需要境外网络的操作。
操作
step1
新建一个flow,不用添加代码源,新建一个task,找到执行命令,选择香港构建集群,执行如下内容
wget -O - https://raw.githubusercontent.com/acmesh-official/acme.sh/master/acme.sh | sh -s -- --install-online --force
mkdir -p ./ssl/hunsh.net
/root/.acme.sh/acme.sh --issue --dns dns_dp -d hunsh.net -d *.hunsh.net
/root/.acme.sh/acme.sh --installcert -d hunsh.net --cert-file ./ssl/hunsh.net/hunsh.net.crt --key-file ./ssl/hunsh.net/hunsh.net.key --fullchain-file ./ssl/hunsh.net/hunsh.net.chain.crt
然后添加环境变量,像我这里使用的dnspod的api,所以需要添加DP_Id
和DP_Key
。
然后再添加一个构建物上传的步骤,打包ssl/
step2
在下一个阶段新建一个task,选择主机部署模板,选择之前的ssl制品,选择要部署的主机。
解压到你的证书目录,然后记得加 --strip-components 1
参数,不然会多一层目录。
step3 设置定时
flow目前仅支持每周的定时触发,所以我们开启webhook,用自己的服务器通过每两月一次的定时任务curl来触发。
按月的触发器需求已经反馈到云效的产品了,应该过一段时间就会上。
至此完成,一个证书大概1分钟每次,还可以加上钉钉提醒,让自己心里更有底。
本文由 hunsh 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: Mar 17, 2021 at 11:47 pm