群晖7.2 Docker安装acme.sh自动更新部署多域名SSL证书

准备:

  • 群晖DSM7.2
  • 你域名解析的供应商DNS账户权限:
    • 如阿里的AccessKey ID, AccessKey Secret;
    • CloudFlare的API Key;

阅读前确定:

  • 如果你只是想做群晖的默认单一域名SSL证书的自动更新,可以节省时间访问此处
  • 如果你想让群晖自动更新部署默认域名意外的多个域名的SSL证书,可以试试以下方式:

第一步:安装设置acme.sh

在文件夹docker里建一个acme.sh的文件夹;

打开Container Manager,在注册表中搜索acme,下载第一个neilpang/acme.sh;

创建容器,起名字如:acme-sh,选中“启用自动重新启动”;

储存空间设置:

添加环境变量:

Ali_Key : # 填 AccessKey

Ali_Secret : # 填 AccessKey Secret

SYNO_Username : # 登录群晖的用户名(建议使用管理员权限)

SYNO_Password : # 登录群晖的密码

SYNO_Device_ID: #如果你用于登陆的账户启动了二次验证,还需要确定设备ID

SYNO_Certificate :# 空字符串("")为替换默认证书,这里输入任命名来区别于默认证书

SYNO_Create:1 # 表示如果证书不存在,则创建该证书。

SYNO_Port : # 填入群晖内网的端口号(如果你修改过,默认是5000。)

如果是CloudFlare的账户,则使用:

  • CF_Token=”MY_SECRET_TOKEN_SUCH_SECRET”
  • CF_Email=”myemail@example.com”

关于更多DNSAPI,点击这里查询;

更改网络为host,添加命令daemon;

运行容器。

二、创建脚本

可以直接使用群晖自带的文本编辑器,直接新建Autoupdatecert.sh

#!/bin/bash

# ==参数说明==
# 1)申请证书参数
docker exec acme-sh acme.sh --force --log --issue --server letsencrypt --dns dns_ali --dnssleep 120 -d 123.com -d abc.com
# acme:容器的名字,根据自己的容器名填写
# --server letsencrypt:选的是Let's Encrypt的免费证书
# --dns dns_cf:这里选的是Cloudflare的DNS
# --dnssleep 120:Sleep 120秒
# -d XXX.XXX -d *.XXX.XXX:替换用自己的域名即可,如果有更多的域名,用-d隔开即可。

# 2)部署证书到群晖参数
docker exec acme-sh acme.sh --deploy -d 123.com -d abc.com --deploy-hook synology_dsm

# acme:容器的名字,根据自己的容器名填写
# --deploy -d XXX.XXX -d *.XXX.XXX:对应好自己的之前域名
# --deploy-hook synology_dsm:部署到群晖上

到此,可以进行测试:
通过SSH进入群晖;

使用bash命令运行刚才创建的Autoupdatecert.sh,注意文件路径可以通过文件属性找到。根据我教程的如下:

bash /volume1/docker/acme.sh/Autoupdatecert.sh

如果代码运行最后显示success!那么祝贺你成功了,在群晖设置证书中可以看到一个新的证书已导入。

第二步:设置证书更新任务

在群晖“控制面板”——“任务计划”——“新增”——“计划的任务”——“用户自定义脚本”

常规:给任务明成命名,如“Update SSL”;用户账号选择root。

计划:在以下日期运行,选择一个开始日期,并设置每月重复。

任务设置(关键):运行命令下输入用户自定义脚本
bash #Autoupdatecert.sh文件路径#
>>#生成日志存放路径# 2>&1

如:

bash /volume1/docker/acme.sh/Autoupdatecert.sh >>/volume1/docker/acme.sh/log.txt 2>&1

至此。多个域名的SSL证书自动更新的设置就完成啦!

参考: