当前位置:首页 > 群晖专栏 > 技术教程 > 正文内容

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

admin4年前 (2020-05-25)技术教程355

前言

在折腾运维技术的这条路上,必不可少的就是管理多服务器和多域名,而同时维护这么多有效期仅三个月的免费泛域名证书无疑是一项繁琐的工作.经过一段时间的学习和研究,最终决定使用 GitHub Action 来全自动签发多域名证书,并设置定时触发,自动 Commit Push,甚至可以以附件的形式 Email 给你.服务器端可以通过 crontab 计划任务来执行更新证书的脚本以达到多服务器多域名环境的自动化运维工作.


本教程配置过程略长,但本文将会相对详细和通俗的介绍每个步骤,一旦配置完成,后续完全无需任何人工操作.




教程说明

适用场景

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


如果你的服务器环境相对稳定单一,域名也只有一个,请直接使用官方acme.sh程序在服务器上安装部署,即可达到自动申请和到期续签的需求.


基本流程

  1. GitHub Action 每月定时触发一次

  2. 根据配置文件签发各证书

  3. 自动打包所有证书

  4. 可选 Commit 和 Push 到当前仓库

  5. 可选 附件形式 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配置文件,参考复制粘贴如下.

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  --server letsencrypt --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  --server letsencrypt --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.comioiox.xyz两个域名的泛域名证书:
该两个域名服务商分别为dnspod.cncloudflare,上文DNSAPI中同时填写了两个服务商的 API KEY.
--issue为申请证书命令
--installcert为部署证书,用于把申请的证书移动到ssl目录,方便打包发送邮件.
以上两条命令为一组,根据自身申请域名的多少自行添加.
最后一条zip命令为压缩邮件附件所用,如果无需可以删除.

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

定时触发

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

测试使用

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

成功运行完成

自动 Commit 并 Push 到仓库

收到含证书附件的邮件

  

结语

最后在次声明几点

  • 公共仓库请一定删除CommitPush的步骤,否则会泄漏证书私钥.

  • 本工作流主要是方便多域名证书申请管理,并不适用于自动部署至服务器,请自行选择使用.

  • 关于证书申请命令可以参考官方项目,也欢迎给我留言咨询.

相关链接:



扫描二维码推送至手机访问。

版权声明:本文由梦魁网络资源站发布,如需转载请注明出处。

本文链接:https://family.monkui.com:39/?id=143

标签: 技术教程
分享给朋友:

相关文章

OpenWRT 路由器 OpenConnect VPN 详细图文教程 - 证书配置篇

OpenWRT 路由器 OpenConnect VPN 详细图文教程 - 证书配置篇

前言上文详细介绍了 OpenWRT 路由器 OpenConnect VPN 的基础配置,本文将介绍通过部署自签 CA 根证书和客户端用户证书来实现更安全和方便的登录方式.作为完美主义强迫症重度患者,经过参考网上的各种教程,以及朋友...

OpenWRT 路由器 OpenConnect VPN 详细图文教程 - 基础配置篇

OpenWRT 路由器 OpenConnect VPN 详细图文教程 - 基础配置篇

前言博主早年一直认为在家中部署VPN并没有实际意义,使用体验也不佳.随着宽带和网络技术的进步,家用 NAS 等设备的普及,加上对不可描述的网络需求,使用OpenWRT软路由作为网络核心,使得整个家庭网络变得非常的重要和丰富.让大家从外网通过...

OpenWrt 及 ROS 配置防火墙使内网用户直接访问光猫

OpenWrt 及 ROS 配置防火墙使内网用户直接访问光猫

前言拥有公网 IP 的宽带用户大多数都会使用桥接模式使主路由器来拨号上网,这样能够更方便的使用公网 IP 和端口转发,使得外网访问内网设备及服务更加便利.由于桥接后,光猫仅仅作为光电转换设备,并不在本地内网的 NAT 中,所以常规情况下内网...

简单使用 crontab 定时备份 MySQL 数据库

简单使用 crontab 定时备份 MySQL 数据库

前言有朋友咨询如何去定时的备份 MySQL 数据库,本文将简单介绍使用 crontab 计划任务定时为 MySQL 来备份数据库文件.配置流程配置 mysql 账号密码在用户目录,例如 /root 下创建.my.cnf配...

轻量级 HTTP/HTTPS 代理软件 Tinyproxy docker 部署教程

轻量级 HTTP/HTTPS 代理软件 Tinyproxy docker 部署教程

前言如果有一台境外 VPS 服务器,可以轻松使用 docker 部署一个轻量级的HTTP/HTTPS代理服务,可方便用于类似 GitHub 等需要代理的服务或软件.注意:请不要尝试使用 HTTP,HTTPS 及 SOCKS5 代理用于访问...

OpenWRT 配置 WireGuard 服务端及客户端配置教程

OpenWRT 配置 WireGuard 服务端及客户端配置教程

前言去年出过一期在 OpenWRT 上部署 OpenConnect VPN 的详细教程,主要用于在外办公方便VPN 回家的使用场景.博主几乎每天使用持续了一年多,在 macOS 和 iOS 上体验都非...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。