当前位置:首页 > NAS > 正文内容

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

ym02301年前 (2023-03-21)NAS502

     标题虽然有点拗口,但确实是很多爱折腾的朋友需要实现的功能,通过我无数次的构思与实验,终于探索出了一条可行路径,当然,如果你本身已经拥备公网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应用也是可以找到这个端口数字的

20210913094325162.png


  • 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进行安装,我是全部缺省确认安装的。它的安装界面大致如下:

20210913105258653.png

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

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

20210913105328770.png

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

Email address: admin@example.com

Password: changeme

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

  • 导入ssl证书:

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

20210913110008821.png

  • 拷贝证书:

将证书文件拷贝到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!

20210913110119420.png

20210913110128745.png 

如此设置后,我们把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表达式生成器】按条件生成

20210913110205747.png

代码如下:

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应用

.20210913115919404.png

 

  • 结语

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

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

2.添加用户docker应用

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

4.开启折腾模式……

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


PS:文章来自网络,原文地址

扫描二维码推送至手机访问。

版权声明:本文由嘉睿博客发布,如需转载请注明出处。

本文链接:https://tius.cc/?id=6

分享给朋友:

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

群晖 Docker 安装 Jellyfin 媒体服务器并开启 Intel Quick Sync 提升性能

群晖 Docker 安装 Jellyfin 媒体服务器并开启 Intel Quick Sync 提升性能

-1. 为什么要用 Jellyfin,为什么不用 Plex 或 Emby在本文写作之时:软件硬解转码浏览器HEVC直接串流HDR色调映射IPTV源代码Plex付费无付费无闭源Emby有无有付费闭源Jellyfin有有有有开源文中涉及的各种软件包版本如下:软件包版本查看命令jellyfin10.7.6...

unraid作为ups主机,虚拟机黑群晖作成ups副机进行nut不间断电源联动详细设置教程

unraid作为ups主机,虚拟机黑群晖作成ups副机进行nut不间断电源联动详细设置教程

教程详情:首先,网上相关UPS设置教程,能找到的群晖和其他系统进行UPS联动的所有教程,都是以群晖作为UPS主机,其他设备作为副机。很多人都是Pve、Unraid、Esxi、Omv等宿主系统,虚拟群晖子机。必须直通USB给群晖,否则不能联动;虚拟群晖如果崩溃或者没有开机,那么宿主系统就连不上UPS了...

黑群晖忘记密码解决办法! 不用重装,不用重置

黑群晖忘记密码解决办法! 不用重装,不用重置

大家都知道,白群晖上有 RESET 按钮,如果忘记密码,只要按住四秒钟直到哔声响将会重设管理者密码,我们很多人装的是黑群晖,根本没有reset键,如果你也没有设置找回邮箱,那忘记密码怎么办?这里我分享一种解决办法,说说原理:修改/etc/shadow文件,此文件也是linux系统上保存账户密码文件,...

玩PT,在NAS上如何做种子文件

玩PT,在NAS上如何做种子文件

【写作说明】:刚刚开始玩PT,在NAS上有文件想分享,可是如何做种子呢?不会,在电脑上很容易,但在NAS上,常用的qbittorrent是没有生成种子的菜单的,怎么搞呢,难住我了,好不容易在PT贴吧中找到一个方案,结果贴主写的太简单,对新手来说,交代的不够全面,折腾了好几天,总算搞定了,所以,特意发...

修复黑群晖 DSM7.0 + Btrfs 存储空间/磁盘损毁的问题

修复黑群晖 DSM7.0 + Btrfs 存储空间/磁盘损毁的问题

意外断电重启后,发现群晖提示硬盘损毁了,但是实际上硬盘还是正常的,S.M.A.R.T. 状态也良好,但是无法写入数据,系统状态报告为“严重”,群晖的程序也拒绝工作。修复方法1,通过 SSH 直接登录 root 账号。如果不方便直接登录 root,则执行:cd / su...

TrueNAS SCALE中添加 jellyfin电影服务器容器实列

TrueNAS SCALE中添加 jellyfin电影服务器容器实列

教程开始docker版的jellyfin镜像地址是 https://hub.docker.com/r/linuxserver/jellyfin网站提供的参考 cli指令docker run -d \   --name=jellyfin \...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。