之前提到使用 Nginx Proxy Manager 自动申请证书,但是部署到群晖还需要在 DSM 中操作,下面的脚本可以自动化这一过程。
此教程面向对 docker 有一定了解的用户。
根据脚本前面几行注释,原作者给出的使用方式是使用 SCP
命令把证书文件从另一台主机复制到群晖后,再执行脚本。这里我们不采用这种方法,所有操作都只在群晖这一台主机上进行。
首先把脚本下载到群晖任意目录,这里假设脚本的绝对路径为 /volume1/scripts/replace_synology_ssl_certs.sh
![](https://guff.in:233/wp-content/uploads/2023/06/1686705498-image.png)
然后找到 NPM 生成的证书,一般在容器内的 /etc/letsencrypt/archive/npm-1
中。
如果你已经申请了证书,并且没有映射这个路径,请把此文件夹从容器内复制到宿主机,然后再添加映射记录。切记不要直接把空文件夹映射到容器,这样做会让空文件夹覆盖此路径,造成文件丢失。
同样通过以上的方法获取证书文件绝对路径,这里假设证书的绝对路径为 /volume1/certificates
,文件夹中应有 cert1.pem
chain1.pem
fullchain.pem
privkey1.pem
四个文件,我们只需使用其中三个。
在群晖 DSM 中点击 控制面板-任务计划-新增-计划的任务-用户定义的脚本,任务名称 随便填一个,用户账号 选择 root,计划 选择每月重复。
![](https://guff.in:233/wp-content/uploads/2023/06/1686707717-image.png)
将以下代码复制到 任务设置-运行命令 中,注意将路径改成你自己的:
cp -f /volume1/certificates/privkey?.pem /tmp/privkey.pem \
&& cp -f /volume1/certificates/fullchain?.pem /tmp/fullchain.pem \
&& cp -f /volume1/certificates/cert?.pem /tmp/cert.pem \
&& sudo /volume1/scripts/replace_synology_ssl_certs.sh
前三个 cp
命令是将证书文件复制到 /tmp
路径中并重命名删掉文件名里的数字,第四个 sudo
是以 root 身份执行脚本,脚本完成后会自行重启网页服务。
![](https://guff.in:233/wp-content/uploads/2023/06/1686709394-image.png)
此时证书已经成功替换。
2024.5.14 更新
要注意的是,WebStation 等套件需要重启才能应用更新的证书,在脚本的第38行填入套件名称即可,套件名称可通过 ssh 命令 ls /var/packages/
查询。
PACKAGES_TO_RESTART=("WebStation")