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

前言

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

  • 多服务器证书同步不方便

  • 如果需要添加新的 subdomains 不方便

所以萌生用 pipeline 完成全自动更新+部署的想法。

使用 pipeline 的好处在于,不需要在服务器安装 acme.sh、能够方便地部署于多个环境、方便修改配置。

流水线

我是直接使用阿里云云效的 flow 来完成这个能力。

新建一个 flow,不用添加代码源,新建一个 action,找到执行命令,选择香港构建集群,执行如下内容

1
2
3
4
5
6
7
8
9
10
11

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,找到执行命令,选择香港构建集群,执行如下内容

1
2
3
4
5
6
7
8
9
10
11

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 分钟每次,还可以加上钉钉提醒,让自己心里更有底。


在云效使用flow流水线(pipeline)实现全自动SSL证书更新+部署
https://hunsh.net/archives/107/
发布于
2021年3月17日
许可协议