Unraid基于Acme与NginxProxyManager申请免费证书且自动更新并配合内网穿透实现Https安全访问

7 篇文章 1 订阅
2 篇文章 0 订阅

       标题虽然有点拗口,但确实是很多爱折腾的朋友需要实现的功能,通过我无数次的构思与实验,终于探索出了一条可行路径,当然,如果你本身已经拥备公网ip,则远远没有如此麻烦,可以看看网上的其它文章,但本文对你依然有帮助,只是不需要其中的一些步骤罢了。好了,言归正传,开启折腾实录之旅——大佬勿喷,我只是希望和我一样的小白能够搞清楚而已。

  • 我的配置和打算:

      最近中毒组了1台N1机箱的Nas小主机,华擎Z490m-itx/ac主板,qtb0-10900T处理器,16G+8G的DDR4内存条,硬盘若干,还购买了Unraid专业版正版授权,想着不折腾点实用功能都对不起这些高档(囧)的配件和软件。于是就想在该Unraid系统上安装自己的私有密码管理器(告别在线密码的隐私风险)、自己的图书管理系统、自己的邮件系统、自己的office系统……,而其中的密码管理系统等是需要https才能正常访问和部署的,于是就有了这篇折腾实录。

  • 需要安装的docker应用和插件:

  • Acme(用于申请ssl免费证书)
  • NginxProxyManager(反向代理)
  • Vaultwarden(密码管理系统)
  • User Scripts(添加用户自定义脚本,本文中用于自动申请、拷贝、安装、更新ssl证书)

  • Vaultwarden安装:

        其它很多地方都是关于bitwarden的教程,在unraid中只有vaultawarden,在应用市场中搜索Vaultwarden按模板填写参数安装即可,只需规划好webui的端口即可(在unraid的docker页面查看docker应用也是可以找到这个端口数字的

  • Acme应用安装

        以申请mydomain.cf及其所有子域名的ssl证书为例,且是以在godaddy中解析的域名为例的,如果你是在其它dns解析商,可参考说明文档将其中一些参数修改为你自己的):

  • 创建容器:

 docker run --rm -itd -v /mnt/user/appdata/ssl/mydomain-cf:/acme.sh \

-e GD_Key=***** \

-e GD_Secret=***** \

--net=host --entrypoint /bin/sh --name=acme.sh neilpang/acme.sh

注意:】其中Key和Secret需要你自己在godaddy解析的核实页面自行创建并第一时间记录,之后不再显示。

  • 申请证书:

        更改默认证书为letsencrypt,否则报错,需要邮箱注册(因为acme将默认证书设置成了ZeroSSL)

docker exec acme.sh --set-default-ca  --server  letsencrypt

         正式申请证书:(我的是由godaddy负责域名解析,其它的情参考acme的说明)

docker exec acme.sh --issue --dns dns_gd -d mydomain.cf -d *.mydomain.cf

        安装证书:(执行后将在创建容器那1步设置的路径中生成privkey.pem和fullchain.pem这两个证书文件)--这一步只需要更改-d后的域名,其它都不能动,否则会出错!(你可以先将这2个证书文件下载到本地备用——一会儿需要上传到NginxProxyManager中

docker exec acme.sh --install-cert -d mydomain.cf \

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

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

        将证书拷贝到NginxProxyManager应用中(在NginxProxyManager应用安装后再进行,请参照NginxProxyManager应用安装步骤)

  • NginxProxyManager应用安装:

  • 安装:

        NginxProxyManager是一款专门提供反向代理的软件(应该还有其他功能,我还没有研究,爱折腾的朋友请自行摸索)。可在unraid的app商店中直接搜索NginxProxyManager进行安装,我是全部缺省确认安装的。它的安装界面大致如下:

        记住图中的3个端口:7818是程序的管理端口,NginxProxyManager的管理界面从这个端口进行访问;1880是程序的http端口,你反代到程序的http页面通过这个端口访问;18443是程序的https端口,你反代到程序的https页面通过这个端口访问。你可以把这3个端口改成你想要的或喜欢的数字,只要不和其他端口重合就行。

  • 登录:安装后我们就可以用unrai的ip:7818登录管理页面:

默认的登录账户和密码是:

Email address: admin@example.com

Password: changeme

登录进去后,会弹出一个窗口,让你修改登录账户和密码(自己把它记录好,以后都要用这个账户和密码登录)。

  • 导入ssl证书:

        在NginxProxyManager中导入一次custom证书(否则在下一步拷贝证书文件时是找不到证书目录npm-*的——我导入后增加了一个子目录npm-1),其中key是私钥即privkey.pem,certificates是域名证书即fullchain.pem(这2个文件是Acme安装证书那一步生成并下载到本地的

  • 拷贝证书:

将证书文件拷贝到NginxProxyManager证书目录下(到底是npm-*可以在上一步导入证书后自行到custom_ssl目录下去查看)

cp /mnt/user/appdata/ssl/5inas-cf/*.pem /mnt/user/appdata/NginxProxyManager/custom_ssl/npm-1/

  • 重启NginxProxyManager:

在unraid网页管理docker页面重启或输入如下命令重启

docker exec NginxProxyManager reboot

  • 添加反向代理:

Dashboard】→【Add Proxy Host】按提示填写(一定要对照欲代理的应用的ip和端口对应——比如我的密码库域名是mima.mydomain.cf,docker地址是http://192.168.18.109:1080)→域名填写mima.mydomain.cf,Scheme就用缺省的http,Forward hostname/ip就填写192.168.18.109(我曾尝试填写127.0.0.1,因为我认为我的docker应用npm与vaultwardens是在同一个主机上,仅是端口不一样而已,结果不成功!),forwar port填写1080,一切ok!

 

如此设置后,我们把mima.mydomain.cf解析到https://192.168.18.109:18443,然后通过npm再反向代理到http://192.168.18.109:1080,以实现https加密访问(下面分公网和大内网分别进行说明——这部分只作简要说明,不懂的朋友自行爬网恶补这方面的知识)。

——对于公网,将域名解析到你的路由器公网ip(或者通过动态dns方式),在你的路由器上将18443端口映射到你的unraid主机ip192.168.18.109,这样通过mima.mydomain.cf:18443可以成功访问。

——对于大内网,可以通过frp等内网穿透方式将域名mima.mydomain.cf指向https://192.168.18.109:18443,这样看直接通过https://mima.mydomain.cf不带端口方式访问。

按理到这一步就已经大功告成了,但是由于Acme申请的免费ssl证书的有效期只有90天,所以我们必须在其失效之前再次申请并将其拷贝到docker应用npm中,于是请出下一步的User Scripts插件。

  • User Scripts安装和设置:

在应用市场中搜索User Scripts并安装即可,然后在插件中找到User Scripts插件,添加代码,并将其设定为用户自定义计划任务(custom),输入0 0 0 1 9/2(从9月开始每隔2个月的1日 执行一次,可以到【在线cron表达式生成器】按条件生成

代码如下:

docker run --rm -itd -v /mnt/user/appdata/ssl/mydomain-cf:/acme.sh -e GD_Key=***** -e GD_Secret=***** --net=host --entrypoint /bin/sh --name=acme.sh neilpang/acme.sh;

docker exec acme.sh --set-default-ca  --server  letsencrypt;

docker exec acme.sh --issue --dns dns_gd -d mydomain.cf -d *.mydomain.cf --force;

docker exec acme.sh --install-cert -d mydomain.cf --key-file /acme.sh/privkey.pem --fullchain-file /acme.sh/fullchain.pem;

cp -rf /mnt/user/appdata/ssl/mydomain-cf/*.pem /mnt/user/appdata/NginxProxyManager/custom_ssl/npm-1/;

docker exec NginxProxyManager reboot

  • 成功安全访问vaultwarden应用

.

 

  • 结语

最后再来捋一下实现的思路:

1.AcmeSSL申请免费SSL证书(并通过用户自定义脚本2月定时更新)

2.添加用户docker应用

3.npm调用免费SSL证书,并根据用户需求添加反向代理指向docker应用的ip和端口

4.开启折腾模式……

提醒:全部测试OK后记得开启npm和vaultwarden及你想运行的应用的自启动功能。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

engineerlzk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值