UNRAID基于NginxProxyManager与ACME实现https访问与免费证书自动更新

2020-04-16 19:01:55 32点赞 254收藏 63评论

基于UNRAID打造适合自己的完美NAS系统——篇一

算下来折腾家用NAS有两年多的时间了,最早还是在张大妈这个平台被种的草,各种对比,各种计算之后还是一头扎进自组NAS这个大坑(主要是囊中羞涩),两年下来折腾了不少配件,捡了不少垃圾,试了各种系统,作为一个先前只会用图形界面,看到cmd界面都麻爪的小白来说,各种心酸自不必言说,相信各位“垃圾佬”们自有体会。最后试用了张大妈上最近一段时间才火起来的Unraid,决定就是它了。

在此感谢本站阿文菌、蓝F0X狐、劉壮实,还有人生观、催眠up主司波图等等一众大佬先行者,正是有你们的普及与教程才能用上对本小白来说最为合适的系统。

鉴于本站Unraid相关的文章极多,本文所述及的软件、实现方法仅作为一个实现基本功能的参考,若有纰漏或者更好的方法,还望路过的各位大佬不吝赐教!

Unraid系统的优缺点已有很多讨论,缺点不少:无raid,不支持ISCSI,拷贝过程占用资源极高;优点也很多,上手容易,易用性强,扩展性好,几乎没有阉割的docker,这些优点对于一个基本没有基础的折腾爱好者来说是特别重要的,缺点呢也是有替代或者克服办法的。

好了,废话不多说,先进入今天的正题吧。

https访问的重要性就不多赘述了,Unraid系统可以开启https访问(见人生观大佬文章),不过证书需要自己申请并复制到系统的pem文件内,且貌似只能用于系统的管理页面(这点存疑,因为没有尝试过),如果你只需要远程管理unraid,可以用这个方法。

一、准备工作

要实现远程域名https访问的前提条件是要有公网IP,要有一个自己的域名,并完成域名解析(关于这些哪天有时间了也记述一下自己走过的弯路)。

介绍一下泛域名解析,是指利用通配符* (星号)来做次级域名以实现所有的次级域名均指向同一IP地址,这样在unraid下搭建的各种服务都可以用一个次级域名对应,就不用记各种服务的端口号了。当然,家用宽带由于封掉了80与443端口,所以输入网址访问的时候还是需要加一个端口号小尾巴。

本次要用到两个软件—NginxProxyManager与Acme.sh,以及一个Unraid系统插件User Scripts。

二、NginxProxyManager安装与配置

通过Nginx来完成的一种非常方便的部署HTTPS的方法,这个软件有图形界面,配置起来相对简单,容易上手。

UNRAID基于NginxProxyManager与ACME实现https访问与免费证书自动更新

具体设置步骤还是参考人生观文章来完成——

unraid应用介绍:NginxProxyManager——一个非常优秀的免费反向代理服务器

介绍的已经很详细了,我就不班门弄斧了。

三、ACME部署

ACME是用来生成所需要的SSL证书的,由于证书有效期只有90天,到期需要再次申请,而Unraid系统本身有特殊性,写入系统内的内容重启后就不见了,包括设置的cron定时任务重启后也会消失。要实现定时续期还要用到一个插件UserScripts,站内阿文菌也有详细介绍。这里以阿里云域名为例来介绍,其他公司的域名可参考acme的wiki,基本能用到的域名商都有。

1. 申请阿里云账户的API key

在签发证书前得准备阿里云账户的API key,打开以下地址并创建AccessKey即可:

https://usercenter.console.aliyun.com/#/manage/ak

UNRAID基于NginxProxyManager与ACME实现https访问与免费证书自动更新

注意!阿里云支持子账户功能,为了提高安全性,请参考阿里云的文档,创建子账户后再创建API key,但这不是必须操作的。创建完成后将AccessKey ID与Access Key Secret记下来备用。

2. 部署docker版acme.sh

用ssh客户端连接unraid,这里强烈推荐MobaXterm,可以命令行与文件管理同步进行,这里放上度盘连接(提取码: iwhx)供有兴趣的值友下载。

UNRAID基于NginxProxyManager与ACME实现https访问与免费证书自动更新

输入命令:(#及#内的文字需要替换为你自己的实际路径

docker run --rm -it

-v #这里填入你保存ssl证书的主机路径#/out:/acme.sh

-eAli_Key=###########

-eAli_Secret=###########

--net=host

--entrypoint /bin/sh

--name=acme.sh

neilpang/acme.sh

鉴于大妈上代码显示问题,贴上图片版,注意命令最后的反斜杠""也要输上鉴于大妈上代码显示问题,贴上图片版,注意命令最后的反斜杠""也要输上

3. 申请证书

docker exec acme.sh --issue --dns dns_ali-d #这里填入你的域名,如example.com# -d #这里填入你的泛域名,如*.example.com#

4. 安装证书

申请的证书需要根据你的代理程序种类来导出相应格式的证书,这里要用到nginx的证书。

注意key-file及fullchai-file后面跟的路径是docker下的路径,不要修改,不然会提示文件夹不存在。证书导出后可以在第2步中设置的ssl证书主机路径下找到。

docker exec

acme.sh --install-cert -d 20171020.xyz

--key-file /acme.sh/privkey.pem

--fullchain-file /acme.sh/fullchain.pem

第4部图片版命令,注意--install-cert中间没有空格第4部图片版命令,注意--install-cert中间没有空格

完成后就可以在第2步中填入的路径中找到两个证书文件了:privkey.pem,fullchain.pem

5. 将证书文件拷到NginxProxyManager的证书目录下

cp #第二步中设置的路径#/out/*.pem #你的NginxProxyManager路径#/custom_ssl/npm-4/

(注意这个npm-4可能不一样,在此路径下的文件夹找一个数字最大的拷进去就好)

注意两个路径中间要有个空格注意两个路径中间要有个空格

6. 重启NginxProxyManager

下面两个二选一执行即可

docker exec NginxProxyManager reboot

或者在unraid的docker管理页面下重启也可以。

再打开服务端的网址,看网址栏的左侧是不是有一把小锁出现了。

三、证书的自动续期

Acme本来是能提供自动续期的,由于unraid重启之后对系统所做的更改就重置了,导致acme无法驻留系统。

该轮到User Scripts出场了,关于这个插件阿文菌已有介绍,能实现驻留系统的定时脚本,不受系统重启影响。

1. 合并命令

首先将上面2-6步的命令合并起来,注意每个命令的结尾加上一个“;”这样就能实现多个命令不需要人工干预依次执行。

其中第三步申请证书命令后加一个 --force,这个是为了证书不到期强制重新申请用的。

UNRAID基于NginxProxyManager与ACME实现https访问与免费证书自动更新

2.设置脚本

打开unraid的web管理页面,PLUGINS-User Scripts,点击ADD NEW SCRIPT,起一个名字,OK,将鼠标停留在新建的脚本名字上稍待片刻,点击EDIT SCRIPT,

UNRAID基于NginxProxyManager与ACME实现https访问与免费证书自动更新

将整合到一起的命令行粘进来,(注意首行的#!/bin/bash要保留),然后点击SAVE CHANGES,完成。

注意每段命令后的“;”注意每段命令后的“;”

点击RUN SCRIPT运行一下看是否报错。

没有问题的话就可以设置定时任务了,最后一列的下拉菜单选择custom,右侧出现的横杠上输入

* * * */2 *

这个跟cron的定时规则是一致的,可以自己设置更新频率。由于证书有效期是90天,以2个月的间隔进行更新就可以了。

完成后记得点一下界面左下角的APPLY

UNRAID基于NginxProxyManager与ACME实现https访问与免费证书自动更新

至此,大功告成。

总结

最后捋一下设置过程:配置安装NginxProxyManager——配置ACME并申请证书——设置定时任务,完成!

最后再唠叨几句,Unraid系统算下来算是个相对中庸一点的系统了,哪个方面都能干,但相比专业的系统来说又没那么强大,个人觉得算是个水桶系统吧,而且最重要的是上手容易,不用一直跟代码打交道,不用感受被命令行支配的恐惧。本人也是个小白,很多东西有说的不到的地方,还请指教!


展开 收起

UGREEN 绿联 DX4600 四盘位NAS存储 (赛扬N5105、8GB)

UGREEN 绿联 DX4600 四盘位NAS存储 (赛扬N5105、8GB)

1792元起

Synology 群晖 DS220+ 2盘位NAS (赛扬J4025、2GB)

Synology 群晖 DS220+ 2盘位NAS (赛扬J4025、2GB)

2179元起

QNAP 威联通 TS-464C 4盘位NAS(赛扬N5095、8GB)

QNAP 威联通 TS-464C 4盘位NAS(赛扬N5095、8GB)

2049元起

ZSpace 极空间 Z4 4盘位 NAS存储 黑色 (J4125 8GB)

ZSpace 极空间 Z4 4盘位 NAS存储 黑色 (J4125 8GB)

2584元起

Synology 群晖 DS920+ 4盘位 NAS存储(J4125、4GB)

Synology 群晖 DS920+ 4盘位 NAS存储(J4125、4GB)

2190.84元起

QNAP 威联通 TS-453Dmini 4盘位NAS(J4125、8GB)

QNAP 威联通 TS-453Dmini 4盘位NAS(J4125、8GB)

暂无报价

TERRAMASTER 铁威马 F4-424 Pro 四盘位NAS(Intel Core i3、32GB)黑色

TERRAMASTER 铁威马 F4-424 Pro 四盘位NAS(Intel Core i3、32GB)黑色

3599元起

极空间私有云Z4Pro 性能版 8核16G内存 四盘位Nas网络存储服务器家庭个人云【配4T希捷酷狼硬盘】珍珠白

极空间私有云Z4Pro 性能版 8核16G内存 四盘位Nas网络存储服务器家庭个人云【配4T希捷酷狼硬盘】珍珠白

4299元起

TERRAMASTER 铁威马 F4-424 四盘位 NAS存储(Intel Celeron N95、8GB)黑色

TERRAMASTER 铁威马 F4-424 四盘位 NAS存储(Intel Celeron N95、8GB)黑色

2499元起

HUAWEI 华为 新品华为家庭存储nas家用网络存储主机扩容储存备份文件同步共享

HUAWEI 华为 新品华为家庭存储nas家用网络存储主机扩容储存备份文件同步共享

1999元起

QNAP 威联通 TS-453Bmini 4盘位NAS(J3455、4GB)

QNAP 威联通 TS-453Bmini 4盘位NAS(J3455、4GB)

1899元起

QNAP 威联通 TS-212P3 双盘位NAS(Realtek RTD1295、1GB)

QNAP 威联通 TS-212P3 双盘位NAS(Realtek RTD1295、1GB)

799元起

HIKVISION 海康威视 Mage20 2盘位NAS (4GB)

HIKVISION 海康威视 Mage20 2盘位NAS (4GB)

567元起

UGREEN 绿联 DX4600 Pro 4盘位NAS(奔腾N6005、8GB)

UGREEN 绿联 DX4600 Pro 4盘位NAS(奔腾N6005、8GB)

1846元起

QNAP 威联通 TS-462C 4盘位NAS(赛扬N4505、4GB)

QNAP 威联通 TS-462C 4盘位NAS(赛扬N4505、4GB)

1849元起

Synology 群晖 DS918+ 四盘位NAS(J3455、4GB)

Synology 群晖 DS918+ 四盘位NAS(J3455、4GB)

暂无报价
63评论

  • 精彩
  • 最新
  • 写的不错! [赞一个]

    校验提示文案

    提交
    多谢鼓励 [高兴] 争取能坚持把预想的系列写完 [观察]

    校验提示文案

    提交
    收起所有回复
  • 第三步的时候提示 Unknown parameter : xxxxx.com 怎么破啊 [喜极而泣]

    校验提示文案

    提交
    未知参数,你acme.sh --help看看对应的命令有没有设置好

    校验提示文案

    提交
    收起所有回复
  • 求教 使用acme 获取dns pod证书的时候一直提示invalid domain怎么破 [皱眉] [皱眉] 已经有公网ip 可以远程访问了 就是没有办法二级域名反向代理 卡在这一步了

    校验提示文案

    提交
    申请证书那步命令后面加个 --debug试试,看看详细的报错日志是什么?这个可能是域名所有权验证没通过

    校验提示文案

    提交
    另外要注意第二步两个-e要分别改成DP_Id,DP_Key,第三步命令要改成dnspod的api接口,acme.sh --issue --dns dns_dp -d example.com -d *.example.com

    校验提示文案

    提交
    还有6条回复
    收起所有回复
  • caddy它不香吗?自带https和证书申请,完全不用额外安装acme

    校验提示文案

    提交
    多谢指教,caddy目前用的还是少吧,代码配置还是有点门槛,貌似内置的也是acme的方式申请证书?现在用的nginx图形化,无脑加配置就行。以后有机会搞下caddy

    校验提示文案

    提交
    其实就几行配置文件就搞定了,比NGINX简单不要太多,nginx如果不是有第三方的web图形化配置,那上手难度就更高了

    校验提示文案

    提交
    收起所有回复
  • unraid不能持久化配置?

    校验提示文案

    提交
    写入一些文件里的可以保存吧,我知道的写入go文件的可以保留,但是大部分自定义配置是会丢失的,cron定时任务都保存不了,只能通过插件的方式执行自定义脚本

    校验提示文案

    提交
    收起所有回复
  • 问一下大佬第三步的时候如果用的是ddns解析的域名该怎么写呀,比如华硕自带的example.asuscomm.com这种,谢谢!! [笑]

    校验提示文案

    提交
    华硕的域名好像是dyn域名管理的?你可以试试去看看 第29条这个设置

    校验提示文案

    提交
    收起所有回复
  • 大佬你用这个反代unraid管理页面成功了吗?这边有几个其他服务成功了,但是unraid反而不行,还要设置什么吗

    校验提示文案

    提交
    反代管理页面没问题啊,80端口就好,不过登陆的时候会自动跳转到“域名/login”,需要把对外的端口号加上,“域名:端口/login”,你这样再试试

    校验提示文案

    提交
    感谢,一句话解决了我好几天的困扰…他地址栏自动改了,结果端口没有加进去,唉,难怪上不去,现在好了,谢谢大佬

    校验提示文案

    提交
    还有2条回复
    收起所有回复
  • 咦这个反代咋用,我申请了证书,但是这个貌似不能使用自己申请下来的证书,要填邮箱通过443端口验证的?

    校验提示文案

    提交
    证书只要申请好了放入这个软件的目录里就可以选择了啊,不需要验证了

    校验提示文案

    提交
    收起所有回复
  • custom_ssl文件夹下是空的没有你说的nmp文件

    校验提示文案

    提交
    你在nginx的页面先建个转发试试,先不用证书

    校验提示文案

    提交
    有了,要先设一个转发才会有这个文件。大佬我转发nextcloud,遇到一个很奇怪的问题,用https泛域名能出现登陆界面,但是无法登陆,要修改地址才能进去。jellyfin同样的设置没问题,这个是什么原因 [大囧] [大囧]

    校验提示文案

    提交
    收起所有回复
  • 说句实话,后面都会,就配置NginxProxyManager搞不来 [锁眉]

    校验提示文案

    提交
    这个设置挺简单啊,只要填空就好,文里也有人生观教程链接,不过前提是先要设置好泛域名解析,哪天有空了再水一篇吧 [观察]

    校验提示文案

    提交
    我也是神了,泛域名解析,搞出个证书只有“*”,看不到一级域名 [尴尬]

    校验提示文案

    提交
    还有1条回复
    收起所有回复
  • custom_ssl文件夹下是空的,没有的nmp文件.就算设置了转发也一样没有出现

    校验提示文案

    提交
    自己新建个文件夹试试

    校验提示文案

    提交
    已经成功了,需要导入一次证书才会出现那个文件夹

    校验提示文案

    提交
    还有1条回复
    收起所有回复
  • 但是在复制证书时,我的custom_ssl/目录下没有任何文件夹,我应该如何复制?谢谢指教

    校验提示文案

    提交
    在证书页面有个浏览器上传的选项你仔细找找,上传完了就有文件夹了

    校验提示文案

    提交
    收起所有回复
  • 大佬,请问一下80和443端口被封的情况下怎么设置反代?是不要改NginxProxyManager的监听端口为其他端口?我也用的unraid,但路由用的是ikuai,端口印射那里该如何设置?

    校验提示文案

    提交
    要改其他端口,访问的时候域名后面要加个“:端口号”
    爱快我没用过,搜下教程吧,端口映射应该比较简单

    校验提示文案

    提交
    我把nginx的https端口改为了52443,然后在端口印射里将没网ip的52443端口印射到外网ip的52443端口,然后反代设置那里按人生观大佬的教程设置好了之后。。。外网和内网都没法访问公网ip(或域名):反代端口号的地址,好痛苦 [喜极而泣] [喜极而泣] [喜极而泣]

    校验提示文案

    提交
    收起所有回复
  • [喜极而泣] 大佬代码图片看不清楚啊

    校验提示文案

    提交
    图片版跟上面文本框里的是一致的,大妈代码显示有问题,所以配上图片对照一下

    校验提示文案

    提交
    收起所有回复
  • NginxProxyManager,本身就自带申请证书和续期功能啊,为啥要绕一圈去用ACME搞证书续期这些?

    校验提示文案

    提交
    看发帖时间,老版本是不支持续期的

    校验提示文案

    提交
    怪不得,新版支持自动续期很方便了。

    校验提示文案

    提交
    收起所有回复
  • 甚至还自己集成了php功能

    校验提示文案

    提交
  • 第三步时出现Unkonwn parameter xxxxxxx.com [喜极而泣] [喜极而泣]

    校验提示文案

    提交
    --dns dns_ali -d 添加一个空格就好了

    校验提示文案

    提交
    收起所有回复
  • 功能上类似frp

    校验提示文案

    提交
  • 楼主的自动续期脚本能正常运行吗?我把代码合并之后各种报错 no such container、container not running啥的。。

    校验提示文案

    提交
  • 大佬,请问 Nginx Proxy Manager这个容器该怎么用阿,我已经申请完证书了,证书申请的是阿里云根域名的证书,域名已经解析到公网了,然后反代的时候添加域名我应该添加什么域名阿,我添加的是根域名,下面IP我添加的就是我内网的IP和端口号,协议选的也是http协议,但设置完后我用https//域名:18443或4443端口或者不用端口的都访问不了
    容器研究好长时间了,一直也研究不明白阿

    校验提示文案

    提交
    在你的路由器上设置DDNS,然后端口转发到你的容器对应ip上

    校验提示文案

    提交
    收起所有回复
提示信息

取消
确认
评论举报

相关好价推荐
查看更多好价

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
254
扫一下,分享更方便,购买更轻松