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

简单来说,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? 虽然没有细看,但是感觉有用,留着以后参考。

你可能感兴趣的:(在 Ubuntu 上使用 uWSGI 和 Nginx 部署 Dash (a Flask-based framework) 项目)