准备:
- 群晖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证书自动更新的设置就完成啦!
参考: