nginx(openresty)+uwsgi+flask

生產環境發佈flask的web服務爲了應對高併發一般需要採用nginx+uwsgi+flask的模式。

一、flask

基於 werkzeug實現wsgi接口、使用jinja2作爲模版引擎的小型web框架,此框架不包括任何組件如redis、sqlachemy、celery等都需要自己手動安裝。

app.py:

from flask import Flask
app = Flask(__name__)

@app.route('/test')
def index():
    return "<span style='color:red'>I am app 1</span>"

app.run()

寫完此demo後,其實已經具備發佈一個web服務的條件。

執行啓動命令(flask默認啓動5000的端口): python app.py 

測試:curl http://localhost:5050/test


二、uwsgi

摘自百度百科:

uWSGI是一個Web服務器,它實現了WSGI協議、uwsgi、http等協議。Nginx中HttpUwsgiModule的作用是與uWSGI服務器進行交換。WSGI是一種Web服務器網關接口。它是一個Web服務器(如nginx,uWSGI等服務器)與web應用(如用Flask框架寫的程序)通信的一種規範。

安裝:

pip install uwsgi

用uwsgi作爲接入層啓動flask應用,啓動命令:

uwsgi --http 0.0.0.0:9090 --wsgi-file app.py --callable app --processes 4 --threads 2

注意:

此時需要吧app.py中的app.run()刪掉,否則會優先選擇此方式啓動flask,那麼uwsgi就不會生效。

app.py:

from flask import Flask
app = Flask(__name__)

@app.route('/test')
def index():
    return "<span style='color:red'>I am app 1</span>"


測試:curl http://localhost:9090/test


三、openresty

安裝見另一個博文 https://blog.csdn.net/zt3032/article/details/78657550

此時需要修改nginx的配置文件:

 server {
        listen       8080;

        server_name  localhost;


        location /test {
include uwsgi_params;
                uwsgi_pass 0.0.0.0:9090;

        }

}

啓動openresyt

注意:此時uwsgi啓動的時候需要以socket協議啓動,啓動命令如下:

uwsgi --socket 0.0.0.0:9090 --wsgi-file app.py --callable app --processes 4 --threads 2


測試:curl http://localhost:9090/test


四、uwsgi啓動(配置文件)

uwsgi的啓動我們可以把命令行的參數都放在ini文件中,如myini:

[uwsgi]
socket = 127.0.0.1:9090  #監聽端口
chdir = /opt/myopng/myflask  #flask文件路徑
wsgi-file = /opt/myopng/myflask/app.py #flask文件
callable = app  #flask定義的Flask(__name__)
processes = 4

threads = 2

啓動命令:

uwsgi myini

測試:

curl http://localhost:9090/test



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章