Github Action 部署 acme.sh 全自动批量签发多域名证书教程

Github Action 部署 acme.sh 全自动批量签发多域名证书教程

适用场景
本方案适用于多个域名,不同 dns 服务商,多域名证书合并等运维环境需求.
例如:一台服务器上部署了多个不同域名,甚至每个域名都不是同一 DNS 解析服务商,那么acme.sh程序无法全自动续签和部署每一个域名.此时就可以使用本工作流来实现批量申请,最后在通过编写一个shell脚本,利用crontab来定时批量部署证书,重启 nginx 等 Web 服务器.

如果你的服务器环境相对稳定单一,域名也只有一个,请直接使用官方acme.sh程序在服务器上安装部署,即可达到自动申请和到期续签的需求.
基本流程
GitHub Action 每月定时触发一次
根据配置文件签发各证书
自动打包所有证书
可选 Commit 和 Push 到当前仓库
可选 附件形式 Email 到指定邮箱
准备工作
域名 API KEY
根据 acme.sh 官方项目文档获取自己域名的 API KEY ,具体请参考本文结尾的链接.其示例参考如下:

export DP_Id=”xxxxx”
export DP_Key=”xxxxxxxxxxxxxxxxxx”
export CF_Token=”xxxxxxxxxxxxxxxxxxx”
export CF_Account_ID=”xxxxxxxxxxxxxxxxxxxxxxxxx”
邮件 SMTP 服务器信息 (可选)
如果你的仓库为公开仓库,为避免证书私钥泄漏,可以配置邮件发送到邮箱.
如果是私有仓库,签发的证书可以自动 Commit 并 Push 到本仓库.

配置流程
配置 Secret
可以在任意已存在的仓库配置工作流,也可以单独新建一个仓库来专门管理域名证书.
在仓库的 Settings 中添加 Secret

DNSAPI
创建 DNSAPI 填写上文获取的 API KEY

MAILUSERNAME
创建 MAILUSERNAME 填写 SMTP 服务器的发件邮箱

MAILPASSWORD
创建 MAILPASSWORD 填写 SMTP 服务器的邮箱密码

更新配置
如果后期需要更新 API 或 SMTP 相关信息可以在此 Update 更新

配置 GitHub Action
在仓库中创建 .github/workflows目录,在其目录下创建AutoACME.yml配置文件,参考复制粘贴如下.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
name: Auto ACME

on:
schedule:
- cron: "0 2 1 * *"
watch:
types: [started]

env:
ACME: /home/runner/.acme.sh/acme.sh
DNSAPI: ${{ secrets.DNSAPI }}

jobs:
build:
runs-on: ubuntu-latest
if: github.event.repository.owner.id == github.event.sender.id
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Install & Configure ACME.SH
run: |
curl https://get.acme.sh | sh
echo "$DNSAPI" >> /home/runner/.acme.sh/account.conf
- name: Issue & Deploy Certificates
run: |
mkdir -p ./ssl
$ACME --issue --dns dns_dp -d ioiox.com -d *.ioiox.com
$ACME --installcert -d ioiox.com --key-file ./ssl/ioiox.com.key --fullchain-file ./ssl/ioiox.com.cer
$ACME --issue --dns dns_cf -d ioiox.xyz -d *.ioiox.xyz
$ACME --installcert -d ioiox.xyz --key-file ./ssl/ioiox.xyz.key --fullchain-file ./ssl/ioiox.xyz.cer
zip -r ssl.zip ssl
- name: Commit
run: |
git config --global user.email AutoupdateRobot@email.com
git config --global user.name AutoupdateRobot
git add ./ssl/
git commit -m "Update certificate files" -a
- name: Push
uses: ad-m/github-push-action@master
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
- name: Send mail
uses: dawidd6/action-send-mail@v2
with:
server_address: smtp.qiye.aliyun.com
server_port: 465
username: ${{ secrets.MAILUSERNAME }}
password: ${{ secrets.MAILPASSWORD }}
subject: GitHub Actions Auto ACME
body: Build job of ${{github.repository}} completed successfully!
to: stille@ioiox.com
from: GitHub Actions Auto ACME
attachments: ./ssl.zip

Action 详情
此配置文件中的name为整个工作流步骤.分别为:

Checkout 标准检出操作,用于 clone 仓库文件方便后续 Commit 和 Push .
Install & Configure ACME.SH 安装 acme.sh 并根据创建的 Secret 配置 DNSAPI
Issue & Deploy Certificates 申请证书并压缩以便 Email 附件
Commit 公共仓库请删除该段
Push 公共仓库请删除该段
Send mail 根据需求配置邮件通知或发送证书附件.
修改部分参数申请证书
Issue & Deploy Certificates
本文示例申请ioiox.com和ioiox.xyz两个域名的泛域名证书:
该两个域名服务商分别为dnspod.cn和cloudflare,上文DNSAPI中同时填写了两个服务商的 API KEY.
–issue为申请证书命令
–installcert为部署证书,用于把申请的证书移动到ssl目录,方便打包发送邮件.
以上两条命令为一组,根据自身申请域名的多少自行添加.
最后一条zip命令为压缩邮件附件所用,如果无需可以删除.

根据实际情况修改本段中的域名和 dns 类型.具体的 dns 支持可以参考本文结尾的链接.在此你可以根据示例添加多个域名.

定时触发
工作流已配置每月1日UTC时间凌晨2点,即北京时间10点自动运行.同时当仓库所有者点击star也会触发工作流运行.

测试使用
一切配置完毕即可star启动运行,检测各步骤是否正常.后续工作流将定时自动运行.

成功运行完成

自动 Commit 并 Push 到仓库

收到含证书附件的邮件

原文地址——https://www.ioiox.com/archives/104.html

小伟科技 wechat
python爱好者公众号—每日学习python必备
欢迎打赏支持!