UNRAID基于NginxProxyManager与ACME实现https访问与免费证书自动更新
基于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部署
ACME是用来生成所需要的SSL证书的,由于证书有效期只有90天,到期需要再次申请,而Unraid系统本身有特殊性,写入系统内的内容重启后就不见了,包括设置的cron定时任务重启后也会消失。要实现定时续期还要用到一个插件UserScripts,站内阿文菌也有详细介绍。这里以阿里云域名为例来介绍,其他公司的域名可参考acme的wiki,基本能用到的域名商都有。
1. 申请阿里云账户的API key
在签发证书前得准备阿里云账户的API key,打开以下地址并创建AccessKey即可:
https://usercenter.console.aliyun.com/#/manage/ak
注意!阿里云支持子账户功能,为了提高安全性,请参考阿里云的文档,创建子账户后再创建API key,但这不是必须操作的。创建完成后将AccessKey ID与Access Key Secret记下来备用。
2. 部署docker版acme.sh
用ssh客户端连接unraid,这里强烈推荐MobaXterm,可以命令行与文件管理同步进行,这里放上度盘连接(提取码: iwhx)供有兴趣的值友下载。
输入命令:(#及#内的文字需要替换为你自己的实际路径)
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中间没有空格
完成后就可以在第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,这个是为了证书不到期强制重新申请用的。
2.设置脚本
打开unraid的web管理页面,PLUGINS-User Scripts,点击ADD NEW SCRIPT,起一个名字,OK,将鼠标停留在新建的脚本名字上稍待片刻,点击EDIT SCRIPT,
将整合到一起的命令行粘进来,(注意首行的#!/bin/bash要保留),然后点击SAVE CHANGES,完成。
点击RUN SCRIPT运行一下看是否报错。
没有问题的话就可以设置定时任务了,最后一列的下拉菜单选择custom,右侧出现的横杠上输入
* * * */2 *
这个跟cron的定时规则是一致的,可以自己设置更新频率。由于证书有效期是90天,以2个月的间隔进行更新就可以了。
完成后记得点一下界面左下角的APPLY
至此,大功告成。
总结
最后捋一下设置过程:配置安装NginxProxyManager——配置ACME并申请证书——设置定时任务,完成!
最后再唠叨几句,Unraid系统算下来算是个相对中庸一点的系统了,哪个方面都能干,但相比专业的系统来说又没那么强大,个人觉得算是个水桶系统吧,而且最重要的是上手容易,不用一直跟代码打交道,不用感受被命令行支配的恐惧。本人也是个小白,很多东西有说的不到的地方,还请指教!
OnLeaks
校验提示文案
挥手难回眸
校验提示文案
阿曼达爱吃鱼
校验提示文案
栤嚸
校验提示文案
EV_SM
校验提示文案
值友3989068856
校验提示文案
阿靖SJ
校验提示文案
usee00123
校验提示文案
joker95275
校验提示文案
geglong
校验提示文案
值友3512558917
校验提示文案
eMuzi
校验提示文案
别比比了我知道我很帅
校验提示文案
AK哥
校验提示文案
天天5公里
校验提示文案
栤嚸
校验提示文案
挥手难回眸
校验提示文案
哪跟哪是哪
校验提示文案
忧郁勇者
校验提示文案
值友6895159996
容器研究好长时间了,一直也研究不明白阿
校验提示文案
值友2333764270
校验提示文案
天天5公里
校验提示文案
马富春_
校验提示文案
AK哥
校验提示文案
别比比了我知道我很帅
校验提示文案
eMuzi
校验提示文案
PJPJ
校验提示文案
PJPJ
校验提示文案
值友3167172963
校验提示文案
值友1838367812
校验提示文案
值友6895159996
容器研究好长时间了,一直也研究不明白阿
校验提示文案
忧郁勇者
校验提示文案
值友3512558917
校验提示文案
geglong
校验提示文案
joker95275
校验提示文案
usee00123
校验提示文案
阿靖SJ
校验提示文案
哪跟哪是哪
校验提示文案
值友3989068856
校验提示文案
EV_SM
校验提示文案