前言
在如何优雅地替换掉宝塔面板 一文中我介绍了通过 Nginx Proxy Manager
来替换宝塔面板的方案。该文章中我用的是 host
网络,由于 NPM
无法更改默认的 81 端口,所以会有安全隐患。本文会介绍如何创建一个 docker network
并兼容 IPv6 来更优雅的使用NPM
。
搭建步骤
开启 Docker
的 IPv6(可选)
对于本机配置好 IPV6 的情况,如果想要 Docker
内也能使用 IPV6,需要手动的配置。
首先你要获知本机 IPv6 的子网,运行命令 ifconfig
找到网卡的如下段:
其次请将 Docker
尽可能更新到新版,然后编辑如下配置文件,如果没有这个文件就新建:
写入如下配置:
这里的 fixed-cidr-v6
并不一定需要你的公网 IP,只是用于 bridge
网络的,实际上可以用任意的子网,至少你和我下面提供的网段冲突即可。
注意修改 IPv6 子网。重启 Docker
服务:
这样就给 docker 默认的 bridge 网络启用了 ipv6,注意此时只有使用 bridge 这个网络的容器才有 ipv6,我们可以简单的验证一下:
可以看到 "EnableIPv6": true
的字段。
创建一个公用的 docker network
创建一个名为 web_apps
的网络,对于有 IPv6 的服务器,直接运行命令,不用修改:
如果本机没有 IPv6,则运行:
其他步骤都是相同的。
搭建 NPM
其他的和上文就比较类似了。对于 NPM
的docker-compose.yaml
文件如下:
请仔细看上面的配置文件,对于 PHP 等服务以及其他的 Docker
应用,其端口都 * 没必要映射出来 **,直接用 NPM
反代即可。
值得注意的是,对于需要使用 web_apps
的服务,yaml 配置文件末尾必须包括
并且 每个 service
块中必须包括
这样该 service
才会用 web_apps
这个网络。并且每个 service
名必须保持唯一,其他同网络内的容器想要访问该 service
只需要把 service
名作为 host
即可。
例如放置于 ./data/static_websites/
目录下的enable-73.conf
和enable-74.conf
需要修改为
NPM
在线配置
首次访问 NPM
需要开放 81
端口来进行设置,建议在 NPM
中创建一个网站并开启 HTTPS 来反代 81 端口,然后再关闭 81 端口的映射,这样最为安全。
然后就可以通过域名来访问了,记得还要删除 81
端口的映射,即删除如下行:
然后重建即可:
一个🌰
例如我需要建一个 Cloudreve,同样是 Docker
容器,则 docker-compose.yaml
需要这样配置:
如前文所提到的,Cloudreve
的 HTTP 端口不需要映射出来,因为其和 NPM
处于同一个网络中。
Cloudreve 默认是监听 5212
端口,则 NPM
需要这样配置:
即 Forward Hostname/IP
需要填入你的 service
名(而不是 container_name
,container_name
可以随意起)。
后记
请把本文与 如何优雅地替换掉宝塔面板 结合在一起参考,相信通过这两篇文章的介绍 NPM
的使用应该非常好上手了。
参考文章