博主用flask开发了一个软件,但是使用本地服务器时,局域网外的设备都不能访问,而且如果是连的是有防火墙的校园网,连局域网内部都不可访问。于是在网上找了一些教程,希望能通过公网访问。兜兜转转一大圈,还特地去下载了一个streamlit,测试成功了才发现好像根本用不上。。为了避免小伙伴们走弯路,这里简单分享一下【如何在其他终端公网访问本地部署的flask软件】
1.实现局域网内部访问
选中配置,进行编辑。
可以看到,没有配置环境变量时,系统没有开启debug mode,URL也只有一个。
FLASK_RUN_HOST=0.0.0.0;FLASK_DEBUG=1
在环境变量中输入上述命令,
FLASK_RUN_HOST=0.0.0.0
指定 Flask 应用运行时监听的主机地址。
0.0.0.0 表示监听所有可用的网络接口,这样你的应用可以通过网络被访问(例如在本地网络或通过服务器的公网 IP 访问)。
如果设置为 127.0.0.1 或 localhost,则只能在本地计算机上访问。
FLASK_DEBUG=1
启用 Flask 的调试模式。
1 表示启用调试模式,这会自动开启 Flask 的调试工具,例如显示交互式调试器(Debug Toolbar),方便开发时调试代码。
配置了环境变量后再运行flask可以看到debug模式开启,有两个URL,172的可以被局域网访问(可以开一个热点用手机访问一下)
增加两个注意事项,是我之前踩坑过的。
一个是,可能你在代码文件中有一些自定义配置,比如设定host,port,或者debug模式,但是运行的时候发现还是没有改变。原因是,环境变量的优先级不同,环境变量会覆盖代码中的设置。比如下面这张图,设置了port为3600,而软件监听的仍然是5000.
所以如果要改的话,在优先级高的环境变量中修改,FLASK_RUN_PORT=3600.
第二个是,新版的Pycharm 专业版和以前的配置界面有所不同,开启debug模式是通过右上角的修改选项,选中flask调试,左下角会自动出现一个“flask调试 x”。当然你要直接在环境变量E中用命令也行。
2.ngrok实现公网访问
这里参考了大佬的文章:Ngrok快速将你的本地Streamlit应用创建一个公共的 URL,供外网访问_stremlit ngrok-优快云博客
先去官网(ngrok - Online in One Line)下载ngrok,然后申请你的token。
可以用cmd命令添加
ngrok config 【你的token】
也可以找到文件,手动粘贴(ngrok文件夹下)
配置之后,在cmd运行代码
ngrok http 5000
如果你的端口是3600,那么运行3600
得到一个URL,复制粘贴给局域网外的用户,就可以访问了
3.多路由访问
在URL最后添加自己的子路由,就可以访问不同的网页啦