我将详细讲解如何使用 Docker 和 Nginx Proxy Manager,配合 Cloudflare 的 DDNS 服务,来实现访问内网服务。
准备事项
- Docker环境 (不管你是什么nas软路由都有这玩意吧 咱们需要的工具很简单 直接docker命令安装)
- CloudFlare账号 (我们是要开ssl的!必须用这个 毕竟泛域名15年免续签 你域名过期了 证书都不会过期 阿里云用户把dns解析转到cf谢谢 ) (暂时可以了解一下 源证书目前不适用本教程 因为CloudFlare的自签证书不开小云朵不给用)
注册CloudFlare账号
https://dash.cloudflare.com/sign-up
- 公网V4或开启IPV6 (V6用户需要另一端也开启V6地址才能访问 手机流量已经普及 你公司网络可不一定哦~)
- 安装DDNS-Go (不要用爱快自带的 不要问我为什么 必须用这个!!!!)
- 安装NginxProxyManager (简称NPM 咱们就靠这个来反代 这工具简单还稳定 nginx也行 但我觉得对新人来说没这么方便)
安装DDNS-GO
- ddnsgo文档参考:https://gitee.com/yuanly/Jeessy-DDNS-GO
- 不想麻烦这一步 群晖是有套件版本的 直接装 这一段不用看了 笑死
- Linux一键安装命令
Linux系统默认安装到opt目录 直接复制粘贴到你Linux的终端里运行即可
docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root jeessy/ddns-go
- 群晖一键安装命令 本文全程按照群晖Nas示范 所以你需要把安装命令里的路径给替换掉 /opt/ddns-go 更换成 /volume1/docker/ddnsgo 如果你跟我一样的习惯 可以直接调用以下命令
docker run -d --name ddns-go --restart=always --net=host -v /volume1/docker/ddnsgo:/root jeessy/ddns-go
- 群晖Nas安装教程
ps:
- 我不确定群晖是否会自动给你创建文件夹(已确定会自动创建文件夹) 为了一次性成功不报错 请先去docker文件夹下创建ddnsgo的文件夹
- 计划任务运行后不要急着删除 其实可以一直留着 方便以后再次命令安装docker或执行其他需要用到root的命令 就算他重启后自动再次运行一遍 只要你没有删除那个容器 不会有任何问题 一样正常使用的 不放心再删掉
CloudFlare获取API
API获取好了复制发微信或记事本里存着 以后长期都需要用到。
安装NginxProxyManager
按照上面安装ddnsgo的方法 再次安装npm 所以那个创建好的计划任务别急着删!!!这里复制好粘贴进去
这个我就不提供Linux默认安装的命令 我来解释每一 行的参数代表什么意思 Linux用户只需要根据我对各个参数的解释 你自己想怎么改就怎么改就行了
Nas用户必须给我理解下面啥意思 我会逐条解释 我就不信你懂不了!
docker run -d \
--name nginxmanager \
-p 8080:80 \
-p 81:81 \
-p 888:443 \
-v /volume1/docker/npm:/data \
-v /volume1/docker/npm:/etc/letsencrypt \
--restart=always \
jc21/nginx-proxy-manager
当您运行上述的Docker命令时,每一行的含义如下:
docker run -d
: 运行一个新的容器。--name nginxmanager
: 指定容器的名称为 "nginxmanager"。-p 8080:80
: 将主机上的端口8080映射到容器内的80端口。这样,您可以通过http://localhost:8080
访问NginxProxyManager的HTTP端口。-p 81:81
: 将主机上的端口81映射到容器内的81端口。这样,您可以通过http://localhost:81
访问NginxProxyManager的后台管理界面。-p 888:443
: 将主机上的端口888映射到容器内的443端口。这样,您可以通过https://localhost:888
访问NginxProxyManager的HTTPS端口。-v /volume1/docker/npm:/data
: 将主机上的目录/volume1/docker/npm
映射到容器内的/data
目录。这样,您可以在主机上持久化存储NginxProxyManager的数据。-v /volume1/docker/npm:/etc/letsencrypt
: 将主机上的目录/volume1/docker/npm
映射到容器内的/etc/letsencrypt
目录。这样,您可以在主机上持久化存储NginxProxyManager的证书。--restart=always
: 设置容器在启动时自动重启。jc21/nginx-proxy-manager
: 使用镜像jc21/nginx-proxy-manager
来创建容器。
重点就是映射路径需要改到你群晖对应的存储空间 我是拿默认的存储空间1(/volume1)放置docker 大部分人其实照抄就完事了 有的人docker的共享文件夹不在存储空间1上 你就直接改数字就完事了 后面的保持不动就完事了
然后就是我把http的端口改到了8080 https端口改到了888 来应对80跟443端口都被封掉了情况 这样我们直接把nas的ip的8080 888端口对应的转发到公网就完事了 还不懂我要杀人了!!!
配置NginxProxyManager
装好后点开面板即可查看这个容器创建好并自动运行了 打开你Nas的ip+81端口即可访问面板后台 默认账号admin@example.com,密码:changeme 登陆上去了会强制改邮箱跟密码 按照提示改就好
-
教程都快写完了发现CloudFlare的15年自签证书翻车了 那证书不开小云朵不给你用的 emby nas这种套了cf的cdn还能用啊 卡得一批 被我紧急取消了 那个大家可以了解性的学习下 我暂时不提供更高级别的教程 影响不好 想学可以去别处 我们还是根据网上的传统教程申请
-
申请 Let's Encrypt 三个月的证书
- 接下来我们就可以开始反代内网服务到公网了
举例我的qb地址为:http://192.168.31.1:8080
- 截图IP打错了不要在意这些细节
- 到这就结束了 其他反代内容根据这一举例 自行添加。