Synology(群晖)NAS设置Nginx Proxy Manager

前言

如果你想在网络上公开任何服务,使用反向代理是提高安全性和性能的一个好方法。怎么说呢?反向代理其实就是一个坐在你的源服务器前的服务器,将客户的请求转发给你的源服务器。

通俗点说,你只需要公开一个服务器(使用80/443端口),就可以公开你想要公开的许多网络服务。

记住,这是Synology 程序门户的替代方案,你可以在其中设置反向代理。

如果你的是只创建一个反向代理,你可以用它来代替,因为不需要进行任何配置(除了反向代理设置)。

目录

1. 设置说明
1.1 Macvlan & Bridge Docker 网络接口设置
1.2 MariaDB 安装和配置
1.3 防火墙设置
1.4 容器设置
2. Nginx Proxy Manager 设置
3. 结论

1. 设置说明 – Nginx 代理管理器 Synology NAS

本教程将使用 Synology NAS 和 Docker。由于Nginx Proxy Manager会使用数据库,因此我们需要安装两个不同的容器。

一个用于装数据库,一个用于装Nginx Proxy Manager。默认情况下,Synology 使用80 和 443端口,所以使用我们的主机网络接口并不理想。

因此,我们需要创建一个macvlan网络接口(在Docker中),这样就能绕过此端口冲突。

1. 从 Synology 的软件中心安装Docker。

2. 然后创建一些文件夹,将映射我们的 Docker 容器。默认情况下,Docker 包将在安装完成后创建一个名为 docker 的文件夹。在这个文件夹中,创建一个名为mariadb和nginx-proxy的文件夹。

3. 在nginx-proxy内,创建两个名为data和letsencrypt的子文件夹。

4. 创建一个名为config.json的文件并传到 nginx-proxy文件夹里,文件的内容下面给出。

确保将SYNOLOGY_NAS_IP更改为 Synology NAS 的 IP 地址!

{
   "database": {
   "engine": "mysql",
   "host": "SYNOLOGY_NAS_IP",
   "name": "nginxproxymanager",
   "user": "nginxproxymanager",
   "password": "nginxproxymanager",
   "port": 3306
  }
}

5. 文件夹设置完成。

1.1 Macvlan & Bridge Docker 网络接口设置

1. 确保可以使用 SSH 进入 Synology NAS。打开“控制面板”,选择“终端和 SNMP”,然后选择“启用SSH服务”

如果你使用的是 Synology 的防火墙,记得允许端口 22 流量。

2. 使用您喜欢的 SSH 工具通过 SSH 连接到您的 Synology NAS。

3. 我们需要创建一个 Docker macvlan 网络接口。
首先,我们需要确定在 Synology NAS 上当前存在哪些网络接口,并记下适配器名称。为此,请运行以下命令,并记下包含 Synology NAS IP 地址的网络接口名称(在本例中,我的是 eth0)。

ifconfig

4. 接下来,你需要运行下面的命令,同时替换正确的子网(默认的一般是192.168.1.0/24或192.168.0.0/24)。

你还需要选择一个你想使用的、目前还没有使用的IP地址。我这里是用的192.168.1.198。

注意:npm_network是网络的名称(你可以根据自己的需要来代替)。

sudo docker network create -d macvlan -o parent=eth0 --subnet=192.168.1.0/24 --gateway=192.168.1.1 --ip-range=192.168.1.198/32 npm_network

5. 我们的网络现已创建。现在,我们可以退出 SSH 会话并在 DSM 中禁用它(如果你不使用它)。如果你禁用了它,并为其创建了一个防火墙规则,记得要把这个防火墙规则也激活。

6. 接下来,我们需要创建一个桥接网络。这将允许我们的主机(NAS)与我们的Nginx Proxy Manager容器进行通信。

打开Docker,点进网络选项。选择 “添加”,并输入一个当前未使用的子网。我创建的桥的IP地址是192.168.10.2。

7. 两个网络接口现已设置完毕!

1.2 MariaDB 安装和配置

Nginx Proxy Manager需要一个数据库才能正常工作。

虽然Synology已经打包了一个MariaDB,但我喜欢通过创建第二个Docker容器,且这个容器只用于数据库,从而来分离它。

1. 打开Docker,进入注册表选项,搜索MariaDB,然后下载最新版本的MariaDB。

2. 镜像下载完成后,点开到镜像选项,双击mariadb来设置一个新的容器。

3. 给容器随便起个名,然后选择高级设置。

4. 选择启用自动重启

5. 在部分,选择添加文件夹,然后选择我们之前创建的mariadb文件夹。在挂载路径部分,输入/var/lib/mysql

6. 在”端口设置”部分中,将”本地端口”更改为3306。

注意:如果您必须使用 3306 以外的其他端口作为端口,则需要修改之前所创建的config.json文件。

7. 在环境部分,我们需要创建四个变量。这些变量将存储我们的root密码,数据库名称,用户名和密码。

注意:如果您不想使用下面的值(nginxproxymanager),可以将其更改为所需的任何值,只要修改之前创建的config.json文件即可。

8. 选择应用并创建容器,数据库现在已经创建好了。

1.3 防火墙设置

由于我们使用的是macvlan网络接口,所以我们不需要为Nginx Proxy Manager设置专门的防火墙规则。

但是,MariaDB容器使用的却是主机网络接口,因此,需要一个防火墙规则来允许流量通过。如果你还没有设置

Synology的防火墙,这里也有一个教程,教你如何设置它。

打开”控制面板”,选择”安全”,然后选择”防火墙”。选择”编辑规则”,然后为端口3306添加允许规则。

注意:如果您在上面创建的config.json文件中使用其他端口,则需要放行你改的端口而不是3306。

1.4 Nginx Proxy Manager容器设置

1. 打开 Docker,进入到注册表,然后搜索 nginx-proxy-manager,并下载最新版本的 jc21/nginx-proxy-manager。

2. 镜像下载完成后,点进到镜像选项里,双击jc21/nginx-proxy-manager来设置一个新的容器。

3. 为容器命名,然后选择”高级设置”

4. 选择”启用自动重启”。

5. 在卷轴部分,我们需要创建两个文件夹映射和一个文件映射。

选择 “添加文件夹”,添加data文件夹,并添加挂载路径/data。接下来,选择letsencrypt文件夹并添加挂载路径/etc/letsencrypt。

选择“添加文件”,并选择我们先前创建的config.json文件,其挂载路径为/app/config/production.json。

6. 在”网络”中,添加npm_network,npm_bridge网络,并删除网桥。

7. 匹配端口设置,改成和下面的图片一样。如果你正在使用4443、8080或8081的或其他端口,你可以把端口改为目前没有使用的。

8. 选择应用并创建容器,等几分钟时间,你应该能够通过npm_network IP 地址和端口 81 访问 Nginx Proxy Manager 的后台了。

http://[npm_network]:81

2. Nginx Proxy Manager 设置

1.使用电子邮件地址 [email protected] 和密码 changeme 来进行登录。

2. 登录后,更改你的姓名和电子邮件地址,然后设置密码。

3.Nginx Proxy Manager设置好了,确保将路由器上的端口 80和443 转发到我们上面创建的macvlan网络。

有的朋友在登录时遇到了 “bad gateway “的错误。在对这个问题进行了一段时间的排查后(以及评论中的一些有用的建议),有两种方法可以解决这个问题。

1. 如果 NAS 有多个网卡,并且你为其分配了多个 IP 地址,请在”config.json”文件中输入 NAS 的其他 IP 地址。

2. 将默认的 docker 桥接网络接口连接到两个容器,并在 config.json 文件中使用该 IP 地址。

3. 结论

这是一个相当复杂的教程,但我想它已经被分解得足够容易来进行理解。

你需要设置两个不同的Docker容器来让一个容器工作,这看着有点不正常,但在我看来,这却是让Nginx Proxy Manager在Synology NAS上工作的最好方法。

谢谢你阅读本教程。如果你有任何问题,请在评论中留言!

译自:https://www.wundertech.net/nginx-proxy-manager-synology-nas-setup-instructions

发表评论

此网站受reCAPTCHA保护 并遵循Google隐私政策服务条款