好久没有水博客了…………
今天个人总结一下群晖使用acme.sh在一次部署后全自动更新证书以及部署到群晖DSM系统的使用流程
前言
由于DSM有自己“完整”的一套证书部署流程,所以在参考网上目前能轻松搜索到的已有的教程,发现基本都已经过时了,并没有用上DSM7新的API去操作证书部署
后来发现一直在用的acme.sh原来已经有群晖的deploy hook,但是官方Wiki以及外网上的教程也是过时的
并且acme.sh的官方Github项目内的PR已经有大佬针对DSM7的改良部署脚本(感谢@Eagle3386),所以才有了这篇文章
相关issue:issue #2727
相关PR:PR #4646
准备工作
下载acme.sh
首先要开启DSM的SSH管理功能,然后使用SSH相关软件登录后台
- 第一种方式
# 提权至root账号
sudo su
# 找一个方便的路径存放acme.sh, 这里我选择了root的根目录/root
cd ~
# 通过官方脚本安装
curl https://get.acme.sh | sh -s email=my@example.com
- 第二种方式
因为国内网络特殊性以及群晖本身系统奇葩,个人建议还是去Github把master分支在本地方便访问的设备上git clone或者打包zip下来,再上传到群晖内挪到你想要的路径,最后解压
# 解压zip并安装
unzip acme.sh-master.zip -d acme.sh
cd acme.sh
./acme.sh --install -m my@example.com
替换部署脚本
# 备份原脚本
cd ./deploy
cp synology_dsm.sh synology_dsm.sh.bak
# 下载PR #4646的dsm deploy脚本
curl -O https://raw.githubusercontent.com/acmesh-official/acme.sh/0548ad2fc6b4febe557620ec2280bdec6b7ec304/deploy/synology_dsm.sh
# 当前路径切换至acme.sh程序目录
cd /usr/local/share/acme.sh
申请证书
参照我以前发过的文章:acme.sh免费90天泛域名证书简易说明
# 设置环境参数(DnsPod)
export DP_Id="填写API ID"
export DP_Key="填写API Key"
# 申请泛域名证书
./acme.sh --issue --dns dns_dp -d example.com -d *.example.com
部署默认证书
# 设置环境参数(有权限的群晖账号)
export SYNO_Username='群晖管理员账号'
export SYNO_Password='账号密码'
# 部署证书
./acme.sh --deploy --home . -d "example.com" --deploy-hook synology_dsm
如果你的群晖账号开启了二步验证,这里会提示需要你给群晖系统创建一个信任设备来记住,方便以后自动部署证书。
首先会提示你给“信任设备”设置名称
"Enter device name or leave empty for default (CertRenewal): "
默认名称CertRenewal,有需要的可以自行填写更改名称 ()反正在群晖的Web UI里是看不到的)
然后会提示你输入一次上述SYNO-Username设定的群晖账号的二步验证密码
"Enter OTP code for user '群晖管理员账号': "
输入完毕成功部署后,脚本就会在对应的域名证书目录下记录保存,以后就不用再输入账号、密码和二步验证密码了
# 查看保存信息
cat example.com_ecc/example.com.conf
添加计划任务自动更新和部署证书
这里注意一下,acme.sh默认只在证书到期前一个月才会真正检测到证书即将到期触发更新,想要强制更新可以添加参数 --force
而证书部署只要执行了就会进行部署,所以我个人是每周六执行一次证书检查更新,每个月1日0点执行一次证书部署,避免频繁重新部署DSM的默认证书
# 证书检查更新
/usr/local/share/acme.sh/acme.sh --cron --home /usr/local/share/acme.sh/
# 部署证书
/usr/local/share/acme.sh/acme.sh --deploy --home /usr/local/share/acme.sh -d "example.com" --deploy-hook synology_dsm
这里只放了检查证书到期更新的命令,有需要连着部署一起执行的,自行添加更改
修复DSM更新后运行环境丢失问题
在官方WiKi教程中提到DSM更新后运行环境会被破坏,需要修复。目前我还没遇到过
$ cd /usr/local/share/acme.sh
$ ./acme.sh --force --upgrade --nocron --home /usr/local/share/acme.sh
或者手动添加以下内容到/root/.profile内or manually add below line into /root/.profile
. "/usr/local/share/acme.sh/acme.sh.env"
版权属于:Zakikun
本文链接:https://blog.zakikun.com/archives/80.html
本文采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可。
您可以自由的转载和修改,但请务必注明文章来源并且不可用于商业目的。
2 条评论
非常感谢,解决了我遇到的问题
感谢博主分享~