如何使用gunicorn将Python Flask应用部署为可公网访问的服务
公网访问Flask应用解决方案
无法公网访问的核心原因
你当前获取的192.168.x.x属于局域网保留IP,仅能在当前本地网络内访问。本地家庭/办公网络默认没有对外暴露的独立公网IP,外部网络无法直接寻址到你运行服务的本地机器。
可落地的部署方案
方案1:云服务器部署(生产环境首选,稳定性最高)
如果可切换到Ubuntu系统,优先选择云服务器部署,步骤如下:
- 将Flask项目代码同步到云服务器的venv虚拟环境中,安装所有依赖
- 启动gunicorn服务:
其中gunicorn -w 4 -b 0.0.0.0:5000 server:app-w参数为工作进程数,建议设置为服务器CPU核心数的2倍+1 - 放行端口访问权限:
- 云服务器后台安全组规则中添加5000端口的入站放行规则
- 系统防火墙放行对应端口,Ubuntu下执行
ufw allow 5000/tcp,macOS下在系统偏好设置-安全与隐私-防火墙中添加端口放行规则
- 直接通过云服务器的公网IP+5000端口即可公网访问,如需正式上线可搭配Nginx做反向代理,处理静态资源、SSL证书配置、负载均衡等需求,进一步提升性能和安全性。
方案2:本地机器暴露公网(仅适合临时测试使用)
如果必须在本地机器部署对外提供访问,两种实现路径:
- 公网IP端口映射
先联系宽带运营商确认是否分配了公网IP,如已分配,进入路由器管理后台,设置端口映射规则,将路由器的5000端口映射到运行服务的本地机器的内网IP+5000端口,同时放行路由器防火墙的5000端口,之后通过宽带的公网IP即可访问。注意该方案会将本地机器直接暴露在公网,安全风险较高,仅建议临时测试使用,不要长期开启 - 内网穿透
如没有公网IP,可使用ngrok、frp等内网穿透工具,本地启动gunicorn服务后,运行内网穿透工具绑定5000端口,即可生成临时公网访问地址,外部网络直接访问该地址即可连通本地服务。
本地部署的优化建议
你当前选用的gunicorn已经是Flask生态下成熟的生产级WSGI服务器,不需要更换框架,可从以下几点优化部署稳定性:
- 配置进程守护:Ubuntu下可使用systemd,macOS下可使用launchd,配置服务开机自启、异常自动重启,避免服务意外中断
- 搭配Nginx反向代理:由Nginx处理静态资源请求、流量限制、HTTPS配置等需求,再将动态请求转发给gunicorn,性能和安全性都有明显提升
- 最小权限运行服务:不要用root权限启动gunicorn,使用独立的普通用户运行,降低安全风险
内容的提问来源于stack exchange,提问作者Kesslwovv
相关产品推荐
相关产品推荐

