在Ubuntu+Nginx环境用Gunicorn部署Dash应用报错如何解决?
问题解决方法
错误根因
- 你当前
gunicorn --bind 0.0.0.0:5000 wsgi:app指向的是Dash应用实例,而非Gunicorn需要的可调用WSGI对象。Dash本质是对Flask的封装,可被WSGI服务器识别的实例是app.server属性,也就是你在app.py里定义的server变量。 - 直接执行
python3 wsgi.py能本地运行是因为调用了Dash自带的run_server()开发服务,内部会自动调用底层的Flask server实例,该模式默认只绑定127.0.0.1,所以外部IP无法访问。
修复步骤
第一步:调整wsgi.py配置
将wsgi.py内容替换为以下代码,直接导出可被Gunicorn识别的WSGI实例:
from app import server if __name__ == "__main__": from app import app app.run_server(host='0.0.0.0', port=5000, debug=True)
第二步:调整Gunicorn启动命令
把原来指向wsgi:app的参数改为指向导出的server变量:
gunicorn --bind 0.0.0.0:5000 wsgi:server
验证说明
- 执行启动命令无报错后,先本地执行
curl 127.0.0.1:5000验证服务正常启动 - 若仍无法通过公网IP:5000访问,检查Ubuntu防火墙是否开放5000端口,可执行
sudo ufw allow 5000临时开放端口测试
内容的提问来源于stack exchange,提问作者erixliechtenstein
相关产品推荐
相关产品推荐

