写在最前面:本文大量参考https://post.smzdm.com/p/a6lron8z/,感谢原作者(虽然他细节处很多错漏)。
关于NginxProxyManager的介绍和使用可以查看我的这篇文章:unraid应用介绍:NginxProxyManager-------一个非常优秀的免费反向代理服务器;
提前需要准备的东西:unraid中app商店的插件:CA User Scripts和你的阿里云的Access Key ID、Access Key Secret(其他域名提供商的请自行寻找对应方法)
废话不多说,我们在unraid界面找到setting中User Utilities标签下的User Scripts,,点击进入界面(这是一个运行自定义脚本的插件)。
点击 add new script 按钮添加一个新的自定义脚本,然后随便取个名字:例如acme。
随后界面刷新,出现你新添加的脚本,点击名字出现弹窗界面,点击edit script对脚本进行编辑;
现在开始(脚本中默认的开头的#!/bin/bash请勿删除或者修改)
第一步,创建申请证书的容器:
docker run --rm -itd -v /你需要保存证书文件的路径:/acme.sh -e Ali_Key="********" -e Ali_Secret="*********" --net=host --entrypoint /bin/sh --name=acme.sh neilpang/acme.sh;
解释:这段代码唯二需要自定义填写的就是你准备存放文件的路径和你阿里云的api代码;
第二步:申请证书:
docker exec acme.sh --issue -d abc.com -d *.abc.com --dns dns_ali --force;
解释:代码中的abc.com请填入你自己的域名(不带子域名前缀),*.abc.com请填写为你要申请的子域名证书(*是泛域名)
第三步,生成NginxProxyManager需要的证书形式:
docker exec acme.sh --install-cert -d abc.com --key-file /acme.sh/privkey.pem --fullchain-file /acme.sh/fullchain.pem;
解释:这里唯一需要修改的就是把abc.com改为你的域名(不带子域名)
第四步:复制证书到NginxProxyManager配置文件中
cp -rf /你需要保存证书文件的路径*.pem /你的NginxProxyManager配置文件路径/custom_ssl/npm-8/
解释:复制你申请下来的证书并替换到你的NginxProxyManager配置文件中,请自行找到你的NginxProxyManager中custom_ssl下npm-*路径(custom_ssl下存在多个npm目录,请填入数值最大的那个)
第五步:重启容器,使证书文件生效。
docker exec NginxProxyManager reboot
最后整个脚本文件是这样的:
#!/bin/bash
docker run --rm -itd -v /你需要保存证书文件的路径:/acme.sh -e Ali_Key="********" -e Ali_Secret="*********" --net=host --entrypoint /bin/sh --name=acme.sh neilpang/acme.sh;
docker exec acme.sh --issue -d abc.com -d *.abc.com --dns dns_ali --force;
docker exec acme.sh --install-cert -d abc.com --key-file /acme.sh/privkey.pem --fullchain-file /acme.sh/fullchain.pem;
cp -rf /你需要保存证书文件的路径*.pem /你的NginxProxyManager配置文件路径/custom_ssl/npm-*/;
docker exec NginxProxyManager reboot
最后,点击save changes保存脚本。
设置定时执行:在脚本右边的下拉框里面选择custom,并且填入* * * */2 *
,然后点击下面的apply保存即可
评论(3)
定时脚本是不是有问题
Every minute on every day of every 2 months
acme.sh将默认 CA 更改为 ZeroSSL
如果我不喜欢这个变化怎么办?我想坚持使用letsencrypt?
是的,当然。您--set-default-ca现在或任何时候都可以。然后 acme.sh 将始终使用您设置的默认 ca:在楼主的第二行第三之间添加这个,不然会报缺少email之类的错误,不能运行。
docker exec acme.sh --set-default-ca --server letsencrypt
重启容器命令
docker restart NginxProxyManager