生產環境發佈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;
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