Ubuntu系统(树莓派4)下Flask应用如何实现公网外部访问
Flask应用部署在树莓派Ubuntu系统对外开放外网访问的实现方法
方案1:端口映射(公网IP场景推荐)
该方案成本最低,前提是你的家庭宽带已分配公网IP,可联系宽带运营商免费申请。
- 先给树莓派绑定局域网静态IP,避免设备重启后IP变动导致转发规则失效
- 确认Flask服务的运行端口,示例运行命令:
flask run --host=0.0.0.0 --port=5000 - 登录家庭路由器管理后台,找到「虚拟服务器/端口转发」功能板块,新增转发规则:
- 内部IP:填树莓派的静态局域网IP
- 内部端口:填Flask服务运行端口(示例为5000)
- 外部端口:自定义外网访问端口,建议选择1024以上的高位端口,避免被运营商封禁
- 协议:选择TCP
- 保存规则后,外网用户可通过
公网IP:外部端口直接访问你的Flask应用
注意:80、443等知名web端口默认被运营商封禁,如需使用需完成ICP备案
方案2:内网穿透(无公网IP场景适用)
如果无法申请到公网IP,可通过内网穿透实现外网访问:
- 自建穿透服务:如果你拥有云服务器,可使用frp、nps等开源穿透工具,树莓派作为客户端部署,云服务器作为服务端,配置完成后外网访问云服务器对应端口即可转发到树莓派的Flask服务
- 第三方穿透服务:可直接使用成熟的商业化内网穿透服务,按照官方指引在树莓派上部署客户端后,即可直接获得公网访问地址
生产部署安全建议
- 禁止直接使用Flask自带的开发服务器对外暴露,生产环境请用gunicorn+nginx组合部署:
- 安装gunicorn:
pip install gunicorn - 启动服务示例:
gunicorn --bind 0.0.0.0:5000 app:app(app.py为你的启动入口文件) - 配置nginx做反向代理,处理静态资源、请求限流等逻辑
- 安装gunicorn:
- 配置Ubuntu系统防火墙,仅开放必要端口:
ufw allow 5000/tcp && ufw enable - 按需给应用增加身份鉴权逻辑,避免未授权访问导致的数据泄露或服务被篡改
内容的提问来源于stack exchange,提问作者Tigron
相关产品推荐
相关产品推荐

