WSL中用streamlit所创建的网站,通过公网被访问

WSL中的虚拟IP地址说明

我们在wsl中编写好streamlit程序,比如命名为ui.py,通过下述指令运行的时候:

streamlit run your_script.py

wsl会启动web服务器,并给出两行网址

这两行网址,表示应用可以通过浏览器进行访问,但是我们所看到的Network URL属于是WSL中的虚拟网络接口,通常与Windows主机上的IP地址是不一样的,是WSL给它分配的一个内网地址,这个地址仅限于在 WSL 或 Windows 中使用。其它设备或浏览器是无法直接访问它的,即便是在同一个局域网内,我们这边是想通过公网访问,但我们可以首先先实现在局域网内能够成功的访问它。

局域网访问

防火墙设置

首先,我们要先确定,防火墙的设置,因为防火墙的设置会导致我们的端口无法被外部设备所访问,第一步,Win + R,输入 firewall.cpl,回车,会打开如下界面:

我们点击左侧的高级设置,选择其中的入站规则,会出现如下界面

这里我们选择右侧的新建规则,然后选择端口,点击下一页,选择特定本地端口,并且是TCP,从之前wsl给的网址可以看出,端口是8501,所以在特定端口那个地方,输入8501,点击下一步,然后选择允许连接,配置文件那边,专用公用,都勾选,然后命名,注意命名一定要规范,不要随便命名,因为后面需要查找这个规则的,我这边因为项目是调用ai界面,所以命名为允许streamlit调用ai。成功后,可以在入站规则的列表中查询到。这样即便以后不想用了,知道这个名字,也可以随时删除掉这个规则。

防火墙这个规则完成后,记得重启下streamlit服务器,确保这个规则能够实施。

WSL端口隐射到window中

WSL绑定地址

在wsl的终端运行ui.py(也就是streamlit程序)的时候,输入命令:

streamlit run ui.py --server.address 0.0.0.0

这个命令将 Streamlit 的服务器绑定到 0.0.0.0 地址,意味着它将接受来自任何 IP 地址的请求,而不仅仅是本机的 localhost 地址。

在 Windows 里设置端口转发

首先先在wsl的终端输入如下命令:

ip addr

会显示出一堆信息,这里面包含了你的wsl的ip地址(如果不会看的话,直接全部复制到ai,让他帮你看)

我这边的WSL的ip是172.29.118.79。

接着打开powershell以管理员身份,输入指令:

netsh interface portproxy add v4tov4 listenport=8501 listenaddress=0.0.0.0 connectport=8501 connectaddress=172.29.118.79
这行代码的意思就是添加一个新的端口转发规则v4tov4,这个规则会监听8501端口,0.0.0.0表示会监听所有设备对该端口的请求,并且将信息转发到IP地址为172.29.118.79的8501端口上面(也就是我们WSL中所运行的streamlit程序)。

如果不小心,某个地方写错了,也不要慌,直接通过指令将其删掉即可:

netsh interface portproxy delete v4tov4 listenport=8501 listenaddress=0.0.0.0
在添加完规则后,我们可以查看该规则是否生效了,

输入netsh interface portproxy show all

出现该界面也就是规则成功生效了。

在wsl终端输入指令,查看程序是否在运行:

ss -tulnp | grep 8501

这样基本上就成功完成了端口的映射。

在局域网实现

先在powershell中输入ipconfig,查看本机的ipv4地址

这样你的网站的网址就是http://192.168.27.174:8501

将这个网址发送到同一个局域网内所连接的设备上,手机也好,平板也好,都可以打开。这样局域网内访问也就实现了。

公网访问

我们现在在局域网上面已经可以成功的访问了, 但如果要想让连接在不同的WiFi上面的设备也能够访问这个网站,我们需要达到公网访问,这就需要内网穿透。

内网穿透

内网穿透(NAT穿透)是指通过某些技术手段,使得外部网络可以访问到位于 内网(如家庭局域网、企业局域网等)中的设备或服务。由于内网通常使用的是私有IP地址(如 192.168.x.x, 10.x.x.x),这些IP在公网中是无法直接访问的,因此需要一些技术来“穿透”这个内网隔离的墙,实现外部对内网服务的访问。

内网:手机热点,家庭网络或公司网络中使用的局部网络,使用私有IP地址,这些IP地址不能在公网中直接访问。

外网:通常指的是互联网,使用公网IP地址。

穿透:外部的请求可以“穿过”内网和防火墙,访问到内网中的服务器或设备。

要实现内网的穿透,我们可以使用一些专门的APP比如NatApp。当然这个只是临时的,想要长期的话,是需要申请专门的公网iP。

NatApp

首先我们登入NatApp官网:

NATAPP-内网穿透 基于ngrok的国内高速内网映射工具

在官网中,我们可以购买一个免费的隧道,并且下载它的客户端到指定的文件下,下面:

我这边下载到了 D:\ngrok下面,在我的隧道中查看刚刚所购买的隧道的密钥authtoken,将其复制下来,然后在终端D:\ngrok输入指令:

./natapp -authtoken 你的authtoken

便出现下面的界面

http://f8f7k3.natappfree.cc/z

这个便是你的公网网址,只要这个界面运行着,你就可以通过不同的网络设备访问它,但是校园网不行,具体为什么我也不知道,手机热点都是可以访问的了,这个网址只是临时的,而且每次都是会变的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值