使用uwsgi部署flask

版权声明:欢迎交流学习,转载请注明出处。 https://blog.csdn.net/qq_23869697/article/details/89683244

由于对uwsgi不熟悉,从接触flask并部署到uwsgi用了30个小时。

使用隔离的环境

可以使用virtualenv, conda建立新的环境。我这里使用了virtualenv。
(1)安装 virtualenv
pip3 install virtualenv
(2)在项目的目录下创建虚拟环境
项目的目录:/home/simoe/Documents/flask_uwsgi
切换到目录:
cd /home/simoe/Documents/flask_uwsgi
创建一个名为venv,使用python3的环境
virtualenv -P usr/bin/python3 venv
这里有个坑,如果直接使用virtualenv venv创建环境,默认使用python2.7。-p 表示当前路径,如果没有切换到项目的目录下,要使用
virtualenv /home/simoe/Documents/flask_uwsgi usr/bin/python3 venv
激活环境
source 环境名/bin/activate
这里环境名为venv,所以source venv/bin/activate
关闭环境 deactivate

安装flask

在激活可虚拟环境venv下安装flask才会把flask安装在这个环境中。
pip install flask
按照官方指南,建立一个很简单的应用。
新建一个test.py文件:

from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
    return 'hello world ! '
    
if __name__ == '__main__':
	app.run()

直接运行这个文件然后打开浏览器,输入127.0.0.1:5000
当看到hello world !时证明安装好了。

安装uwsgi

uwsgi使用默认使用python2.7,当你将用python3 写的flash应用部署到默认使用2.7的uwsgi时,就会像我遇到解决不完的bug。
修改uwsgi的Python时很麻烦的,但是直接使用pip3去安装就把uwsgi的默认语言改为了Python3. 跨过很多坑之后知道的。
可能这里会遇到一些错误,比如GCC的版本什么的,先把环境依赖解决
sudo apt-get install build-essential python-dev
然后直接使用
pip3 install uwsgi

查看版本
uwsgi --version
查看Python版本
uwsgi --python-versioin
uwsgi-v
测试

在项目目录下新建一个uwsgi_test.py文件, 写入:

def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"]

在命令行运行:
uwsgi --http :8000 --wsgi-file uwsgi_test.py
uwsgi-start
直接运行这个文件然后打开浏览器,输入127.0.0.1:8000
当看到Hello World 时证明安装好了。

在uwsgi上部署flask应用

前面已经单独验证了flask和uwsgi能够运行成功,接下来如何将flask应用部署到uwsgi呢?
详细的原理这里不介绍,简单的一句命令就能够实现, 前提是你的环境和各个配置都已经正确。
一定要注意uwsgi默认的Python版本和你虚拟环境的版本。上面也介绍了怎么查看。

配置uwsgin_config.ini

在项目目录下新建一个名为config.ini的文件:

[uwsgi]
http = 127.0.0.1:5000 
virtualenv = /home/simon/Documents/flask_uwsgi/venv # 虚拟环境的路径
wsgi-file =  /home/simon/Documents/flask_uwsgi/app.py  # 前面创建的app.py
processes = 2
threads = 8
buffer-size = 32768
master = true

各个参数可以参考这里 uwsgi配置详解

启动/查看/停止

启动命令

切换到项目目录和虚拟环境激活的情况下使用,不然报错

uwsgi config.ini

START
我修改了app.py里面的内容为:

@app.route('/')
def sys_status():
	return 'server starts-up successful!'

打开浏览器输入地址127.0.0.1:5000, 如果没有看见类似下面的界面,就表示配置或者哪里有问题。
suss

查看进程

ps -a

停止

(1)ctrl + c
(2)kill -9 进程号

猜你喜欢

转载自blog.csdn.net/qq_23869697/article/details/89683244