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

2021-09-30 21:34:15 30点赞 156收藏 52评论

引言

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

什么是反向代理

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

SWAGSWAG

准备

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

获取域名

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

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

Duck DNSDuck DNS

将自己的公网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”选择“是”。然后点击“应用”。

保留用户自定义网络保留用户自定义网络

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

终端按钮终端按钮

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

创建网络创建网络

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

部署SWAG

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

SWAGSWAG

配置如下

SWAG第一组配置SWAG第一组配置

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

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

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

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

  • Only Subdomains:填false。

第二组:

SWAG第二组配置SWAG第二组配置

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

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

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

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

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

https://www.nideyuming.duckdns.org

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

SWAG成功页面SWAG成功页面

反向代理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后),访问https://photoprism.nideyuming.duckdns.org,注意把nideyuming替换为你自己的子域名。如果能看到PhotoPrism的登录页面,说明大功告成!

往期文章:

后续文章计划:

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

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

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

  • code server:网页中的VS Code。

  • Plex/Emby

    :私人影音中心。

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

  • ……

展开 收起
52评论

  • 精彩
  • 最新
  • 真棒👏🏻,虽然我看不懂,但老公就是棒👍🏻

    校验提示文案

    提交
    老婆总是第一个👍🏻

    校验提示文案

    提交
    已关注你老婆,但是没有关注你 [龇牙]

    校验提示文案

    提交
    收起所有回复
  • 看起来是类似于宝塔的东西啊,不过应该轻量化了很多,对我这样的菜鸡来说比起手撸 Nginx 应该简单了不少

    校验提示文案

    提交
    宝塔之前没接触过,以后看看~

    校验提示文案

    提交
    收起所有回复
  • 没太明白,这样操作完外网访问还需要加端口号吗?

    校验提示文案

    提交
    不需要在URL中加上端口号,因为我们在路由器上用的是https默认的443端口。

    校验提示文案

    提交
    那不映射443 用别的端口 可以在外网用域名加端口号访问么

    校验提示文案

    提交
    还有4条回复
    收起所有回复
  • 与我的需求相反

    校验提示文案

    提交
    你的需求是什么呀?

    校验提示文案

    提交
    收起所有回复
  • 忘了说最重要的一点 swag就是以前的letsencrypt……

    校验提示文案

    提交
    嗯嗯 没错,我入坑比较晚,它已经改名了,哈哈哈

    校验提示文案

    提交
    收起所有回复
  • 家宽443端口基本不能用,你这怎么代理的

    校验提示文案

    提交
    我自己是校园网,所以写的时候没注意,别的端口也可以,加上端口号即可。

    校验提示文案

    提交
    收起所有回复
  • 请教下楼主,因为我的路由只要重启,公网IP就会变。那duckdns怎么填入哦?

    校验提示文案

    提交
    那你需要用到动态dns,来自动更新IP地址,这篇文章中没有提到,后面我再写篇分享~你是openwrt路由器吗?是的话可以在openwrt里配置,更加方便,不是的话也没关系,可以在unraid上配置。

    校验提示文案

    提交
    我是openwrt设置了自动更新ip,ip不是固定的话,duckdns怎么填入呢?

    校验提示文案

    提交
    还有6条回复
    收起所有回复
  • 按教程到配置文件修改了。WWWW能转到welcome,换别的子域名就502了。
    conf的容器名和端口都按的应用来的,不知道怎么解决了。 [喜极而泣]

    校验提示文案

    提交
    1. 去看看可以访问welcome页面对吗?abcde.nideyuming.duckdns.org可以访问到welcome页面吗?abcde可以替换成任意字符串。这一步是用来确定duckdns的配置是否正确。
    2. 通过ip地址和端口映射能访问PhotoPrism吗?这一步是要确定PhotoPrism本身是正常运行的。
    3. 确定swag和PhotoPrism的Network Type都是你新创建的那个容器网络吗?即文中说的Custom:happynetwork

    校验提示文案

    提交
    谢谢楼主的热心分享。自己搞定了,配置文件不用改,文件名和端口都不动,把容器的名字改成配置内的名字就没问题了。试了emby和bitwarden都正常访问, [高兴]
    期待楼主后续的其他域名提供商的SWAG容器配置,自己注册了freenom的cf域名,ddns也弄好了,SWAG不会设置。 [喜极而泣]

    校验提示文案

    提交
    还有1条回复
    收起所有回复
  • 大佬,这样设置完能在我家网络环境访问,不能在其他网络访问是咋回事

    校验提示文案

    提交
    哦应该是封锁了443端口,这该怎么办?

    校验提示文案

    提交
    可以用别的端口,比如一万以上的,然后访问的时候在域名的后面也加上端口号。
    去看看:10086/someurl

    校验提示文案

    提交
    收起所有回复
  • ipv6的啥时候出啊。我没ipv4。

    校验提示文案

    提交
  • 和npm那个好点

    校验提示文案

    提交
  • 不错,另一种反向代理玩法 [赞一个]

    校验提示文案

    提交
  • 赞一个,老哥继续。正好最近在部署自己的nas,正好学习。

    校验提示文案

    提交
  • 老大,是不是Authelia也安排上,带我们玩玩

    校验提示文案

    提交
  • IPV6可以用吗?

    校验提示文案

    提交
  • 再次请教楼主,有试过swag反向代理访问群晖么?看自带的配置文件,没有群晖的sample [大囧]

    校验提示文案

    提交
  • DuckDNS试了没问题,用阿里云就不行,已经在/dns-conf里的aliyun.ini填好了key和secret,报错:Encountered exception during recovery: requests.exceptions.ConnectionError: HTTPSConnectionPool(host='alidns.aliyuncs.com', port=443): Max retries exceeded with url:

    校验提示文案

    提交
    配置SWAG docker的时候,VALIDATION填DNS,然后下面的DNSPLUGIN填aliyun。再修改aliyun.ini之后重启docker就行了。

    校验提示文案

    提交
    收起所有回复
  • seafile的docker版本用过吗?按照你这样的操作,大部分都可以正常访问,唯独seafile和wiznote访问不了,文章中提到的方法都试过了,不行。楼主有空试一下?

    校验提示文案

    提交
  • 这篇文章的最大收获,overleaf居然有docker版,岂不是在自己服务器上不会受编译时间限制了 [傻笑]

    校验提示文案

    提交
  • 我用的阿里云,正确配置了,比如输入
    去看看
    :20443,可以输出:Welcome to your SWAG instance页面,我在proxy-conf里面配置好了calibre-web文件,输入calibre-web.xxx.top:20443,怎么还是输出:Welcome to your SWAG instance这个页面

    校验提示文案

    提交
    同样的问题,无论怎么配置端口从外网打开的都是swag页面无法转发进入对应的docker。

    校验提示文案

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

取消
确认
评论举报

相关文章推荐

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