在云效使用flow流水线(pipeline)实现全自动SSL证书更新+部署

in DevOps with 0 comment

前言

之前我域名Let's Encrypt的SSL证书都是在服务器使用acme.sh自动续期的,但是存在一定的问题:

所以萌生用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自动续期的,但是存在一定的问题:

所以萌生用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_IdDP_Key

然后再添加一个构建物上传的步骤,打包ssl/

step2

在下一个阶段新建一个task,选择主机部署模板,选择之前的ssl制品,选择要部署的主机。

task2

解压到你的证书目录,然后记得加 --strip-components 1参数,不然会多一层目录。

step3 设置定时

flow目前仅支持每周的定时触发,所以我们开启webhook,用自己的服务器通过每两月一次的定时任务curl来触发。

按月的触发器需求已经反馈到云效的产品了,应该过一段时间就会上。

至此完成,一个证书大概1分钟每次,还可以加上钉钉提醒,让自己心里更有底。

Responses