You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用Flask搭建本地服务器实现局域网及公网访问?已有完整Flask应用

当然可行!用Flask搭建本地/互联网可访问的Web服务器完全没问题

首先明确:你的需求完全能实现——不管是让同一局域网(WiFi/LAN)的设备访问,还是通过互联网远程访问,Flask都能做到。你之前试uWSGI没成功,大概率是配置细节没到位,下面我一步步给你讲清楚:

一、先搞定本地网络访问(WiFi/LAN)

这是最基础的,先把这个跑通:

  • 修改Flask的运行绑定地址:默认Flask只监听127.0.0.1(只能本机访问),你需要改成0.0.0.0,这样它会监听电脑的所有网卡。
    • 代码里改:在你的app.py(或主文件)里,把app.run()改成:
      if __name__ == '__main__':
          app.run(host='0.0.0.0', port=5000)  # port可以自己选,比如8080
      
    • 或者用命令行启动(推荐,尤其是用虚拟环境时):
      • Windows:set FLASK_APP=app.py && flask run --host=0.0.0.0 --port=5000
      • Linux/macOS:export FLASK_APP=app.py && flask run --host=0.0.0.0 --port=5000
  • 找到你的本地IP
    • Windows:打开命令提示符,输入ipconfig,找“无线局域网适配器WLAN”或“以太网适配器以太网”里的IPv4地址,比如192.168.1.105
    • Linux/macOS:终端输入ip addrifconfig,找类似192.168.x.x的地址
  • 测试访问:同一局域网的设备(比如手机、另一台电脑)打开浏览器,输入http://你的本地IP:5000,就能看到你的Flask应用了!
  • 注意防火墙:如果访问失败,检查电脑防火墙是否允许5000端口的入站连接,手动放行即可。

二、互联网远程访问

要让外网能访问,分两种情况:

1. 你有公网IP(大部分家庭宽带需要向运营商申请)

  • 确认公网IP:百度搜索“我的IP”,得到的地址和你路由器WAN口的IP一致,就是有公网IP。
  • 路由器端口映射
    1. 登录路由器后台(一般是192.168.1.1192.168.0.1,看路由器说明书)
    2. 找到“端口映射”/“虚拟服务器”选项
    3. 添加映射规则:外部端口设为80(默认HTTP端口,访问不用输端口),内部IP填你的电脑本地IP,内部端口填Flask用的5000,协议选TCP
    4. 保存设置
  • 测试访问:用手机流量(不要连WiFi),打开浏览器输入http://你的公网IP,就能访问了!
  • 补充:如果运营商屏蔽了80端口,换个端口比如8080,访问时输入http://你的公网IP:8080;如果公网IP是动态的(隔几天变一次),可以用DDNS服务绑定一个固定域名,不用每次改IP。

2. 没有公网IP(不想折腾运营商)

用反向代理工具,比如ngrok、localtunnel,它们能把你的本地端口“穿透”到互联网:

  • 以ngrok为例:
    1. 下载ngrok(对应系统版本)
    2. 解压后,在终端/命令提示符里运行:ngrok http 5000
    3. 运行后会生成一个临时域名,比如https://abc123.ngrok.io,外网用户用这个域名就能访问你的Flask应用了!
  • 注意:免费版的域名是临时的,重启ngrok就会变;付费版可以固定域名。

三、生产环境部署(解决你uWSGI的问题)

Flask自带的服务器是开发用的,性能差、不稳定,不能用于长期对外提供服务。你之前试uWSGI没成功,大概率是配置细节没对,下面是标准的uWSGI+Nginx配置步骤:

1. 安装uWSGI(在虚拟环境里)

pip install uwsgi

2. 创建uWSGI配置文件(比如myapp.ini

放在你的Flask应用根目录,内容如下:

[uwsgi]
module = app:app  # 左边的app是你的主文件名(比如app.py),右边的app是Flask实例的名字(比如你代码里的app = Flask(__name__))
master = true  # 启用主进程
processes = 4  # 进程数,根据CPU核心数调整,比如4核就设4
socket = myapp.sock  # 和Nginx通信的Unix套接字文件
chmod-socket = 660  # 设置套接字权限,让Nginx能访问
vacuum = true  # 退出时自动删除套接字文件
die-on-term = true  # 收到终止信号时退出

3. 测试uWSGI是否能运行你的应用

uwsgi --ini myapp.ini

如果没有报错,说明uWSGI能正确加载你的Flask应用。

4. 安装并配置Nginx

  • 安装Nginx:
    • Ubuntu/Debian:sudo apt install nginx
    • CentOS/RHEL:sudo yum install nginx
  • 创建Nginx站点配置文件:
    sudo nano /etc/nginx/sites-available/myapp
    
    内容如下(注意替换路径和域名/IP):
    server {
        listen 80;
        server_name 你的公网IP或域名;  # 比如123.45.67.89或yourdomain.com
    
        location / {
            include uwsgi_params;
            uwsgi_pass unix:/绝对路径/myapp.sock;  # 替换成你myapp.sock的绝对路径,比如/home/yourname/flaskapp/myapp.sock
        }
    
        # 如果你的应用有静态文件(css、js、图片等),添加这个配置
        location /static {
            alias /绝对路径/static;  # 替换成你静态文件目录的绝对路径,比如/home/yourname/flaskapp/static
        }
    }
    
  • 启用配置文件:
    sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
    
  • 测试Nginx配置是否正确:
    sudo nginx -t
    
    如果显示test is successful,就重启Nginx:
    sudo systemctl restart nginx
    

5. 把uWSGI设为系统服务(可选,开机自启)

创建systemd服务文件:

sudo nano /etc/systemd/system/myapp.service

内容如下(替换路径和用户名):

[Unit]
Description=uWSGI service for my Flask app
After=network.target

[Service]
User=你的用户名  # 比如ubuntu
Group=www-data
WorkingDirectory=/绝对路径/你的Flask应用根目录
Environment="PATH=/绝对路径/你的虚拟环境/bin"  # 比如/home/yourname/flaskapp/venv/bin
ExecStart=/绝对路径/你的虚拟环境/bin/uwsgi --ini myapp.ini

[Install]
WantedBy=multi-user.target

然后启动服务并设置开机自启:

sudo systemctl start myapp
sudo systemctl enable myapp

现在,不管是本地局域网还是互联网,都能稳定访问你的Flask应用了!

内容的提问来源于stack exchange,提问作者Sóstenes Apollo

火山引擎 最新活动