群晖DSM7.0免费自动更新证书 Docker版

群晖NAS是一个非常好用的存储,SSL现在非常重要,我们简单进行一些改造,让群晖使用acme自动申请和配置。

本文将使用最新版群晖和Docker来进行。

🍟准备

  • 有一个已注好的域名

  • 已经在群晖安装好Docker

  • 已注册好 Cloudflare 帐户 https://dash.cloudflare.com/

  • Cloudflare帐户申请API

🧁群晖Docker 安装 acme.sh 免费申请*泛域名

🔦安装acme.sh Docker脚本工具

  • 注册表 » 搜索 acme.sh » 选择 nellpang/acme.sh 。点击下载 弹出窗口选择 latest 最新版。

  • 开启 acme.sh 容器 为后续命令规划,容量名一定要重命名为acme.sh

  • acme.sh 容量映射文件夹
    • 在共享文件夹(控制面板)中创建一个 docker 文件夹,然后创建一个子文件夹 acme 。
    • 结构为 docker/acme
    • 高级设置 » 存储空间 指定这个文件夹 本地目录 docker/acme ,容量装载目录 /acme.sh
    • 高级设置 » 网络 使用host (重要,网络结构很重要)

  • 高级设置 » 网络 使用host (重要,网络结构很重要)

  • 高级设置 » 环境 新增可变配置 (重要),命令填daemon,应用后开始 运行。

    • SYNO_Port 群晖的访问端口,http的默认为5000,如果改动过就用改过之后的

    • SYNO_Certificate 要添加的证书的名字,空字符串("")是替代默认证书,一般使用空字符串,除非有多个证书

    • SYNO_Create 证书名不存在就自动创建,多证书使用,(这里无需添加)

    • SYNO_UsernameSYNO_Password 为群晖的用户名及密码(管理员级别)

    • SYNO_DID 群晖开启二步验证需要加did值,没开不加。

      获取方法:chome 打开群晖内网,按:F12 - 开发者工具 » 选择 “网络”;按 Windows: Ctrl+ 🆁 / macos: ⌘ + 🆁; 然后查找:群晖 ip » 标头» cookie » did ( 复制 did cookie 的内容)

    • DNS 证书的变量,具体参数可参照配置文件或acme.sh官方文档

      • cloudflare

        CF_Key “cloudflare 中查看你的 key” CF_Email “你的 cloudflare 邮箱”

      • 阿里云

        Ali_Key Ali_Secret

      • DNSPOD

        DP_Id

        DP_Key

安装成功,去日志查看是否运行成功。

💾配置acme并自动同步域名SSL

🧀创建脚本

将以下代码copy至 文本编辑器,保存成txt文件 utf-8模式。然后将扩展名和文件名改为 cert-up-docker.sh

原理,使用群晖webhook脚本替换所有的证书。从此不再手动替换。

  • 将cert-up-docker.sh到 docker/acme 目录

letsencrypt 版本脚本:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/bin/bash
# 主域名 xxx.com 等,不要加*.xxx.com
export DOMAIN='XXX.com'

# DNS类型,根据域名服务商而定"dns_ali,dns_dp,dns_gd,dns_aws,dns_cf"
export DNS='dns_cf'

# DNS API 生效等待时间 值(单位:秒)
# 某些域名服务商的API生效时间较大,需要将这个值加大(比如900)
export DNS_SLEEP=200

# 证书服务商 zerossl(免费域名使用兼容性好) 和 letsencrypt (通用)
#export CERT_SERVER=zerossl
export CERT_SERVER=letsencrypt

# ZeroSSL 注册邮箱账户
#export ACCOUNT_EMAIL="myemail@example.com"

generateCrtCommand="acme.sh --force --log -- issue --server ${CERT_SERVER}" --dns ${DNS} --dnssleep ${DNS_SLEEP} -d "${DOMAIN}" -d "*.${DOMAIN}"""
installCrtCommand="acme.sh --deploy -d "${DOMAIN}" -d "*.${DOMAIN}" --deploy-hook synology_dsm"

docker exec acme.sh $generateCrtCommand
docker exec acme.sh $installCrtCommand

🍖群晖运行脚本

打开 控制面板 » 任务计划 » 新增 计划的任务 - 用户定义的脚本

对应下图将三个tab 都配好再确定

  • 常规 帐号要先 root
  • 计划 每月一次
  • 任务设置 下面代码copy
1
bash /volume1/docker/acme/cert-up-docker.sh >>/volume1/docker/acme/log_acme/log.txt 2>&1

查看是否成功

Filestation 前往 docker/acme 文件夹看有没有 证书文件。有就是成功。

后期看有没有自动续签。查看一下文件更新时间


结语

感谢前作者和爱好者不断的优化。

Licensed under CC BY-NC-SA 4.0
这是一个墨茶的博客
Built with Hugo
主题 StackJimmy 设计