云计算、AI、云原生、大数据等一站式技术学习平台

网站首页 > 教程文章 正文

群辉6.x部署docker acme.sh自动续签ssl证书

jxf315 2025-06-15 17:10:50 教程文章 2 ℃

黑裙DS918+ V6.23养老,HTTPS证书以前都是腾讯云、阿里云申请的免费一年的。这最近免费证书都改成了90天了,手动换太麻烦了。 只能考虑自动续签了。

acme.sh的部署教程很多,并不难,但实际部署在老版本群辉里却发现了几个大坑,用了大半天时间才一个个解决。

先说“坑”,如果有朋友凑巧搜到这个贴,可以省点时间。

1、acme.sh容器版本必须用3.0.6版本,不然 和群辉6.x不兼容,无法自动登录群辉更新证书。

脚本执行报错:

[Wed Jul 10 06:38:54 UTC 2024] Logging into localhost:5000...

[Wed Jul 10 06:38:54 UTC 2024] Failed to authenticate with error: 102.

[Wed Jul 10 06:38:54 UTC 2024] Error deploy for domain:xxxx.com

[Wed Jul 10 06:38:54 UTC 2024] Deploy error.

参考这里:
https://github.com/acmesh-official/acme.sh/issues/4721

2、必须加--keylength 2048生成rsa证书,如果不加默认生成ECC证书,老版本群辉不支持。

脚本执行报错:

[Wed Jul 10 07:31:55 UTC 2024] The domain 'xbaodi.com' seems to have a ECC cert already, lets use ecc cert.

[Wed Jul 10 07:31:55 UTC 2024] Please refer to https://curl.haxx.se/libcurl/c/libcurl-errors.html for error code: 7

解决方法是 命令增加参数 --keylength 2048, 强制生成RSA证书

3、SYNO_Hostname="192.168.33.3" 这里必须用IP,不然localhost不能http:5050登录群辉。

如果群辉开了登录跳转https,而如果没有证书或者证书到期,这时候用localhost不管登录时SYNO_Scheme="http"还是"https"都无法登录,这时候只能登录ip,并且端口写http端口号。


我简单的说一下步骤,

1、在docker注册表搜索acme,双击neilpan/acme.sh选择版本3.0.6

2、创建容器仅需选择

①容器名称 acme ②自动重启 ③ 路径映射 /dcoker/acme.sh /acme.sh ④执行命令 daemon

3、建立执行脚本文件,比如我放到了这里
/volume1/common/bin/acme_ca.sh

#!/bin/bash
#你的域名
DOMAIN='xxxx.com'

#证书供应商
CERT_SERVER='letsencrypt'

#DNS供应商 可选 dns_dp(腾讯云) dns_ali(阿里云) dns_cf 其他可查https://github.com/acmesh-official/acme.sh/wiki/dnsapi
DNS="dns_dp"

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

#群晖账号密码
SYNO_Username='xxxxx'
SYNO_Password='xxxxx'

#如果开启了双重验证请在浏览器登录时选中保存此设备,然后从COOKIE中获取did cookie
#SYNO_Device_ID=''

#以下群晖配置非必要不要更改

SYNO_Hostname="192.168.33.3" # Specify if not using on localhost
SYNO_Scheme="http"
SYNO_Port="5000"

#要添加的证书的名字,空字符串("")的话就是替代默认证书,一般建议使用空字符串,除非你有多个证书
SYNO_Certificate='xxxx.com'
SYNO_Create='xxxx.com'

#以下三选一
#DNSPOD.CN 腾讯云
DP_Id=''
DP_Key=''

#阿里云
Ali_Key=''
Ali_Secret=''

#CF
CF_Key=''
CF_Email=''


# 环境变量设置
case $DNS in
  "dns_dp")
    a="DP_Id=${DP_Id}"
    b="DP_Key=${DP_Key}"
    ;;
  "dns_ali")
    a="Ali_Key=${Ali_Key}"
    b="Ali_Secret=${Ali_Secret}"
    ;;
  "dns_cf")
    a="CF_Key=${CF_Key}"
    b="CF_Email=${CF_Email}"
    ;;
  *)
    echo "Unsupported DNS provider: ${DNS}"
    exit 1
    ;;
esac

c="SYNO_Username=${SYNO_Username}"
d="SYNO_Password=${SYNO_Password}"
f="SYNO_Hostname=${SYNO_Hostname}"
g="SYNO_Scheme=${SYNO_Scheme}"
h="SYNO_Port=${SYNO_Port}"
i="SYNO_Certificate=${SYNO_Certificate}"
k="SYNO_Create=${SYNO_Create}"

# Docker 容器检查
container_status=$(docker inspect -f '{{.State.Running}}' acme 2>/dev/null)

if [ "$container_status" != "true" ]; then
  echo "Error: No such container: acme"
#  docker ps -a
  exit 1
fi

# 加 参数 --force 可以覆盖已经生成的密匙

# 生成证书
docker exec -e "${a}" -e "${b}" acme acme.sh --log --server "${CERT_SERVER}" --issue -d "${DOMAIN}" -d "*.${DOMAIN}" --dns "${DNS}" --dnssleep "${DNS_SLEEP}" --keylength 2048

# 部署证书
docker exec -e "${c}" -e "${d}" -e "${f}" -e "${g}" -e "${h}" -e "${i}" -e "${k}" acme acme.sh --issue -d "${DOMAIN}" -d "*.${DOMAIN}" --dns "${DNS}" --deploy --deploy-hook synology_dsm


4、添加计划任务

新增一个计划任务脚本,任务创建后点右键,手动运行一次,即可生成并更新证书。

bash /volume1/comm/bin/acme_ca.sh >> /volume1/comm/log/acme_log.txt 2>&1
最近发表
标签列表