在 Ubuntu 上使用 uWSGI 和 Nginx 部署 Dash (a Flask-based framework) 项目

本文介绍了WSGI协议及其在Python Web开发中的作用,重点讨论了Flask框架结合uWSGI和Nginx进行部署的过程与技巧。文章还列举了一些实际部署中可能遇到的问题及解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简单来说,Web框架致力于如何生成HTML代码,而Web服务器用于处理和响应HTTP请求。Web框架和Web服务器之间的通信,需要一套双方都遵守的接口协议。WSGI协议就是用来统一这两者的接口的。WSGI 是一个 Python 协议,定义了应用程序(我们写的软件)如何与 Web 服务器(如 Nginx)通信,WSGI 只是一个接口。而 uWSGI 是一个支持多种语言的服务器容器,使用 WSGI 定义的标准实现与多种 Web 服务器的通信,并将 Web 服务器发来的请求“翻译”成应用程序所能理解形式。

具体应用

Dash

Web Application

这里我们用 Flask (Python based web application framework)

服务器容器

可选的容器有 uSWGI, Gunicorn

Web 服务器

可选的服务器有 Nginx

教程

在 Ubuntu 上使用 uWSGI 和 Nginx 部署 Flask 项目
阿里云部署 Flask + WSGI + Nginx 详解
Flask + Gunicorn + Nginx 部署
如何为 Flask Web 应用配置 Nginx
部署Flask到生产环境服务器上的基本逻辑和大概步骤流程
部署· Flask之旅
在 Ubuntu 服务器上部署 flask 程
部署flask项目到linux服务器
使用Nginx和Gunicorn在服务器上部署Flask项目
flask几种部署方式实践
Flask进阶系列(八)–部署和分发
ubuntu部署python项目(virtualenv + flask + uwsgi + nginx)(附:部署过程中遇到的问题及解决方法)

遇到的问题

Error 1:
$ uwsgi --version
uwsgi: error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory

Solution:

PCRE issue when setting up WSGI application

如果按照答案的步骤来做的话, 每次电脑启动都需要重新执行一遍.
以下是根据上面答案改版的一个一劳永逸的方法

$ sudo find / -name uwsgi
[sudo] password for kent: 
find: ‘/run/user/1000/doc’: Permission denied
find: ‘/run/user/1000/gvfs’: Permission denied
/home/kent/anaconda2/pkgs/pcre-8.41-hc27e229_1/lib/libpcre.so.1
/home/kent/anaconda2/lib/libpcre.so.1
$ gedit ./.bashrc
# # 打开编辑器之后添加以下内容
# added for finding the libpcre.so.1 for uSWGI
export LD_LIBRARY_PATH=/home/kent/anaconda2/lib${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
# # 保存, 关闭编辑器
$ source ./.bashrc
Error 2:
$ uwsgi --socket 10.0.9.21:5501 --protocol=http -w app:app
# Open browser and visit 0.0.0.0:5000
TypeError: 'Dash' object is not callable

Solution:

Dash - pythonanywhere deployment issue

$ uwsgi --socket 10.0.9.21:5501 --protocol=http -w app:server
Error 3:
invalid request block size: 21327 (max 4096)...skip

Solution:

uwsgi invalid request block size

change socket = 0.0.0.0:8000 to http = 0.0.0.0:8000

Standalone Desktop App for Dash (or other Flask-based)

Instead of using browser to open the flask-based app, you can create a window to run the app. This is the standalone desktop app we discussed here. You could choose various toolkits to build the window for flask app, such as pywebview, PyFladesk. To wrap everything into an app, you could use PyInstaller (note: this is semi-cross-platform, run it in Window to generate .exe programme (on MacOS for .app and Linux for Linux-programme).

For Dash, you could also take a look of Dash server-less Client-side callback which is generally used for sever-less.

How to use Plotly/Dash (Python) completely offline? 虽然没有细看,但是感觉有用,留着以后参考。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值