前言
目前腾讯云免费证书有效期只有短短90天,本记录以腾讯云DNSPOD为例,使用群晖docker部署 acme.sh 的方式免费申请泛域名证书以及配置自动续签,保证证书不会到期中断。
一、腾讯云DNS Token申请
-
打开DNSPod 控制台
腾讯云DNSPod: DNSPod -
获取 DNSPod Token
点击右上角头像 > 点击API密钥 > 选择DNSPod Token > 创建密钥 -
记录并保存Token,忘记需重新创建密钥
二、群晖创建acme.sh容器并配置环境
无法正常访问Docker注册表的请参考使用:Docker/DockerHub 国内镜像源/加速列表
- 在共享文件夹docker里建一个acme.sh的文件夹
- 拉取acme.sh docker镜像
- 打开群晖docker,在注册表里搜索acme.sh,找到并下载neilpang/acme.sh
- 创建容器
- 容器名为:acme-sh
- 高级设置 > 存储空间:添加文件夹docker/acme.sh,装载路径到 /acme.sh
- 网络为host
- 添加环境变量(如果开启了两步验证,需要繁琐一些,也可以为acme.sh专门新建一个账号)
DP_Id : 填入第一步获取的 DNSPod ID
DP_Key :填入第一步获取的 DNSPod Token
SYNO_Username :登录群晖的用户名
SYNO_Password : 登录群晖的密码
SYNO_Certificate :空字符串("")为替换默认证书
SYNO_Create:填域名
SYNO_Port : 填入群晖内网的端口号(我用的默认端口5000未修改)
- 命令处添加:daemon
- 点击下一步,运行容器。
此时容器搭建完毕,但证书还没有获取,也没有部署,必须要一个脚本文件来启动它。
三、创建脚本文件
- 在群晖用文本编辑器,创建一个新文本,粘贴如下代码,修改 '你的域名' ,然后保存,修改文件名为cert.sh
#!/bin/bash
# 域名
DOMAIN='你的域名'
# DNS类型,dns_ali dns_dp dns_gd dns_aws dns_linode根据域名服务商而定,CloudFlare就是dns_cf
DNS=dns_dp
# DNS API 生效等待时间 值(单位:秒),一般120即可
# 某些域名服务商的API生效时间较大,需要将这个值加大(比如900)
DNS_SLEEP=120
# 证书服务商,letsencrypt
CERT_SERVER=letsencrypt
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
- 将此脚本文件放到 /volume1/docker/acme.sh 文件夹下,然后右键属性,复制好路径位置,一会要用
四、获取证书
- 首先确认群晖的ssh端口是打开的,然后运行终端,连接群晖。并使用sudo -i 提升账号权限为root权限
- 然后执行脚本运行命令,路径就用刚才复制的脚本文件路径
bash /volume1/docker/acme.sh/cert.sh
- 看到最后的Success,就是成功了。
然后我们可以在 /volume1/docker/acme.sh/ 文件夹下看到有个以我们域名命名的文件夹,里面就是新保存的证书了 - 然后控制面板 > 安全性 > 证书 检查下证书是否已更新
- 以上步骤成功之后,我们就可以去部署自动更新的脚本了
五、自动获取更新证书脚本
- 打开群晖控制面板 > 任务计划 > 新增,用户账号选root
- 计划:可设置为每3个月运行一次
- 然后任务设置 > 运行命令(用户定义的脚本),粘贴如下代码,目录名称以实际为准:
bash /volume1/docker/acme.sh/cert.sh >> /volume1/docker/acme.sh/log.txt 2>&1