UNRAID修炼笔记003:DuckDNS+SWAG反向代理

作者:搞网络_真快乐

引言

照片管理、网盘、Overleaf、Code Server、笔记……在Unraid里搭建的各种应用,如果只能在家庭局域网中访问,瞬间就变得没那么有用了。另外,不同的应用运行在不同的端口、ip地址,虽然可以从Unraid的Docker列表中直接跳转,但总让人觉得有些散乱,同时,使用http协议的应用虽然配置起来简单,但http的明文传输带来许多安全隐患。本篇文章要介绍的SWAG容器提供的反向代理功能就是用来解决这些问题的。

什么是反向代理

SWAG容器是我们唯一暴露向公网的接口,我们连接在公网的设备通过https协议(加密的http协议)访问SWAG容器中运行的NGINX,NGINX根据请求的域名以及URL,将请求分发给相应的运行在内网中的各项应用(PhotoPrism、Nextcloud、Overleaf、wiznote……),这就叫做反向代理。

准备

首先,你需要确认自己的路由器是有公网ip的,并且知道如何在自己的路由器上进行端口映射。验证自己知否有公网ip的方法是,登录百度,搜索“ip”,搜索结果中会包括“本机ip”,登录你的路由器管理页面,检查你的WAN口ip是否和百度显示的“本机ip”一致,如果一致,说明你拥有公网ip,如果不一致,说明没有。

获取域名

获取域名的方式有很多种,这里以免费的duckdns为例。

访问www.duckdns.org,创建账号并登录后,输入自己的子域名,然后点击add domain,比如我这里设置的是happynetwork。

将自己的公网ip输入到current ip,然后点击update ip,如果有ipv6地址,则把ipv6地址填入ipv6,然后点击update ipv6。

创建Docker网络

Docker默认的网络(就是我们在unraid中配置容器时选择的Network Type)不支持容器间的DNS服务,也就是说,从一个容器访问另一个容器必须指明另一个容器的ip地址(例如172.17.0.11),如此一来,许多配置写起来很不方便,所以我们先自己另外创建一个Docker网络,在此网络中我们是可以使用Docker的DNS服务的,也就是说,在原来需要写ip地址的地方,现在只需要写容器名(例如photoprism)就可以了。下面介绍具体步骤。

第一步:首先进入unraid的设置界面,选择Docker,修改配置前我们需要先停止Docker。所以,“启用Docker”选择“否”,然后点击“应用”。

点击右上角“基本视图”右边的切换按钮,进入“高级视图”,“保留用户自定义网络”选择“是”,“启用Docker”选择“是”。然后点击“应用”。

第二步:接下来我们通过命令行创建一个用户自定义的Docker网络。首先在页面右上角找到终端按钮并打开终端。

在终端中输入命令docker network create happynetwork,并按回车,执行完成后关闭终端即可。happynetwork是所创建网络的名字,可以任意。

接下来我们就可以正式部署SWAG容器了。

部署SWAG

在unraid apps中搜索swag,点击install按钮,进入docker配置界面。

配置如下

网络类型选择我们刚刚创建的用户自定义网络。

http和https:访问SWAG的两个端口,任意两个没有被占用的端口即可,在路由器上进行端口映射,将路由器的443端口映射到Unraid主机的在这里填写的https端口。

Domain Name:你在duckdns注册的域名。

Subdomain:填写wildcard,这样,你的证书就会包含所有的子子域名,例如abc.happynetwork.duckdns.org,def.happynetwork.duckdns.org……

Only Subdomains:填false。

第二组:

Validation:验证方式,填写duckdns,如果是其他方式得到的域名,这里要做相应修改。

AppData Config Path:填写/mnt/user/appdata/swag。我们之后要去这个目录里修改SWAG的配置,使其反向代理我们的应用。

DuckDNS Token:在duckdns.org上登陆后,可以看到自己的token。

配置完成后,点击应用,启动SWAG容器。点击Docker列表中SWAG的图标,点击日志,等待一段时间,如果看到“Server Ready”的字样,说明成功了。

如果你已经配置了路由器的端口映射,此时访问

注意把nideyuming替换为你自己的子域名,应该能看到:

反向代理PhotoPrism

首先我们需要把之前部署的PhotoPrism容器移动到我们刚刚创建的网络中(happynetwork)。在Unraid的Docker页面点击PhotoPrism的图标,然后选择“编辑”。修改“网络类型”为我们新创建的用户自定义网络(例如我这里的happynetwork),修改后点击“应用”。

然后,我们对SWAG进行配置,让它反向代理PhotoPrism服务。用你喜欢的方式(例如可以把appdata这个share挂载到电脑上)打开文件:

/mnt/user/appdata/swag/nginx/proxy-confs/photoprism.subdomain.conf.sample

将在同一文件夹下另存为photoprism.subdomain.conf

如果你PhotoPrism的容器的名字就是photoprism,那么你不需要对这个文件做任何修改,否则,你需要把下图中红色圈出的部分修改为你的PhotoPrism的容器名。

保存文件,重启swag容器,等待一段时间后(或者查看swag日志,等到出现Server Ready后),访问,注意把nideyuming替换为你自己的子域名。如果能看到PhotoPrism的登录页面,说明大功告成!

Unraid修炼笔记#001 硬件选配与装机

Unraid修炼笔记#002 PhotoPrism

后续文章计划:

大家在评论区留言的问题。

除DuckDNS外的其他域名提供商的SWAG容器配置以及DDNS的配置、ipv6外网访问。

NextCloud+ONLYOFFICE:在线编辑网盘中的office文件。

code server:网页中的VS Code。

Plex/Emby

:私人影音中心。

rclone:备份OneDrive、坚果云等网盘,给数据再上一道保险。

……