写在开头
近期有一些朋友咨询我关于如何将Python的Gradio,Flask或Docker项目绑定到域名上并制作缓存规则,本篇文章旨在介绍一种简单易懂的方案快速绑定域名。
准备道具
Miska, Muska, Mickey Mouse
这些是待会要用到的神秘妙妙工具
- 一台可以访问互联网的电脑
本文张将以Unix类系统举例,本人使用macOS,从理论上与Linux通用,Windows用户请自行摸索
- 一个域名
- 一颗钻研的心
- 一些英语水平
让我们开始吧
Step 0: 环境检查
这里的检查非常的重要,甚至建议这一步完成在购买服务器之前。以下一张来自阿里云帮助文档的图片很好的展示了这一点:
如果你没有备案
备案则表示如果你想使用域名访问国内的服务器,不管什么端口都需要备案。如果你很遗憾的提前购买了国内服务器但是又没有备案,我建议你不用想备案的事情了,直接尝试联系客服退款。个人备案当今是难上加难,再加上各个地区管局的政策不太一样,个人备案可能性几乎为0,而且过于麻烦。
直接尝试购买海外云服务器如AWS,Azure,GCP,Digital Ocean在尝试下一步。
如果你有备案
那你是真nb,直接无脑冲国内低价云服务器,包靠谱的。但是你仍然需要解决一些镜像源的问题(如Docker,Apt等包管理器,Python)。
Step 1:安装Docker
对于macOS的用户来说,直接前往Docker官网下载安装Docker Dekstop即可或者使用brew
安装Docker,我建议你拥有良好的国际互联网环境。
对于Linux的用户来说,我们可以使用以下几行命令完成:
1 | curl -fsSL get.docker.com -o get-docker.sh |
在安装完成之后,无论什么系统,我们都应该可以使用docker --verion
来查看当前版本,如果出现类似如下的提示,表示安装成功:
1 | Docker version 26.1.4, build 5650f9b102 |
接着我们需要将Docker设置为开机自启动,对于Debian的服务器,使用如下命令即可完成,其他系统请自行搜索:
1 | systemctl enable docker |
Step 2: 安装Nginx Proxy Manager
这时候肯定就有懂哥跳出来说为什么不使用原版编译直接安装。我想说的是,这种操作过于的复杂,对新手不是很友好,如果你都知道怎么编译安装了,你也不回来看这篇文章对吧~
Nginx Proxy Manager以下简称为NPM
我们言归正传,首先我们需要创建一个供NPM保存数据的地方,使用:
1 | mkdir -p ~/docker_data/npm |
这会在你的用户根目录下递归创建一个名为docker_data
的文件夹并且内有npm
这个文件夹。
接着我们使用以下命令切换目录(change directory)进刚刚创建的文件夹。
1 | cd ~/docker_data/npm |
进入文件夹后,我们便可以使用一种类似于模板的配置文件来启动我们的NPM,这种文件被称之为Docker Compose
,有兴趣的可以自行上网翻阅,以后可能单独出文章讲解Dockerfile
与docker-compose.yml
。
1 | vi docker-compose.yml |
输入此命令之后我们按一下键盘上的i
键,接着将如下内容复制进去:
1 | version: '3.8' |
接着按一下键盘上的⎋ esc
按钮,接着输入:wq
来保存文件,别问为什么,问就是vim大法好(可自行上网学习,以后打死也不会出这个文章)。
这时候就有有经验的老司机尝试直接up容器了,但是我们还需要先检查端口是否被占用,使用如下命令判断端口是否占用,每个命令都不应该有输出,如果有,请查看是什么进程占用这他并按需kill掉。
如果没有lsof
命令,请自行上网搜索安装方法。
1 | lsof -i :<刚刚设置的所有端口> |
在确认端口未被占用之后,使用如下命令启动容器:
1 | docker compose up -d |
如果防火墙开放正确的话,我们可以使用http://
至于如何开放防火墙,请自行搜索,或咨询服务器厂商。建议将此管理口限制ip访问,以免出现因NPM自生漏洞导致的安全问题。
Step 3: 进行反向代理
什么是反向代理
此处引用来自Cloudflare博客的文章来给大家讲解,
反向代理是位于一个或多个 Web 服务器前面的服务器,拦截来自客户端的请求。这与转发代理不同 - 在转发代理中,代理位于客户端的前面。使用反向代理,当客户端将请求发送到网站的源服务器时,反向代理服务器会在网络边缘拦截这些请求。然后,反向代理服务器将向源服务器发送请求并从源服务器接收响应。
转发代理和反向代理之间的区别非常细微,但非常重要。简单概括而言,转发代理位于客户端的前面,确保没有源站直接与该特定客户端通信;而反向代理服务器位于源站前面,确保没有客户端直接与该源站通信。
这一次,所涉及的计算机包括:
- D:任意数量的用户家用计算机
- E:这是反向代理服务器
- F:一台或多台源站
通常,来自 D 的所有请求都将直接发送到 F,而 F 会直接将响应发送到 D。使用反向代理,来自 D 的所有请求都将直接发送给 E,而 E 会将其请求发送到 F 并从 F 接收响应,然后将适当响应传递给 D。
配置NPM
修改管理员密码
在登录管理后台之后,你将会看到一个登录界面,初始密码如下:
1 | Email address: admin@example.com |
接着按照提示修改名称,邮件,密码。
此处会根据邮件读取来自Gravatar的头像作为用户头像。
绑定域名
进入Hosts
界面,选择Add Proxy Host
在Domain Names
处填写用户访问的域名,不需要https://
,如blog.createchstudio.com
接着一般情况下保持scheme不变,在Forward Hostname/IP
处填写非标服务的主机名,如172.18.0.1
在Forward Port
处填写非标端口,如8080
接着可以勾选Block Common Exploits
来防御常见漏洞
配置SSL证书(HTTPS)
如果你使用的是Cloudflare,并且SSL/TLS选项选择为灵活
,则可跳过这一步骤,完成解析后并开启小橙云可直接使用HTTPS访问。
如果使用的是完全
或想要使用自己的SSL证书,则需要以下步骤:
- 拉取Cloudflare证书或第三方可信证书
- 进入NPM的
SSL Certificates
选项卡 Add SSL Certificate
-Custom
- 自定义名称,建议为域名
- 上传私钥与公钥文件,中间证书留空
- 点击保存
- 回到刚刚添加的
Hosts
,在SSL
选项卡内选择自定义的SSL证书
如果想要自己申请SSL证书,使用以下步骤:
在SSL
选项卡内选择Request a new SSL Certiicate
接着按需勾选Force SSL/HSTS
,建议全部勾上,除了HSTS Subdomains
勾选Use a DNS Challenge
选择你域名的DNS Provider并填入对应的Token
同意条款,并开始申请。
附加步骤:更新NPM
- cd进之前创建的npm目录,如
~/docker_data/npm
- 停用容器(此操作会让绑定的所有网站下线,请择吉日更新)
1 | docker compose down |
- 备份配置
1 | cp -r ~/docker_data/npm ~/docker_data/npm-bak |
- 拉取新镜像
1 | docker compose pull |
- 重启容器
1 | docker compose up -d |
- 删除之前不再使用的镜像
1 | docker image prune |
游戏结束
恭喜你,你已经成功的将来自非标端口的服务绑定到域名并成功设置了SSL证书,祝你网站运营之旅顺利!
如果有进一步问题可以在地下评论哦~