Flask+Gunicorn+Nginx+Supervisor部署高并發web工程。

服務器系統:ubuntu 16.04 LTS python環境:3.6

Flask?

Flask是一個使用python代碼編寫的輕量級web框架,可以通過簡易的配置快速實現各類web服務功能。常用于web_api、個人博客、中小型服務網站搭建。

flask的搭建流程就不細說了,大致如下: 1 通過pip 安裝flask 依賴

? ??????pip install flask

2 新建run.py文件 引入flask模塊

????????flask import Flask,request

????????import json #通常還會引入json模塊

????????from flask_cors import CORS #跨域訪問 cors 按需要配置

????????app = Flask(__name__)

????????CORS(app, supports_credentials=True) #可去除

????????@app.route('/')?

????????def hello_world():

? ? ???????? return 'Hello World!'

????????@app.route('/test', methods=['GET'])

????????def test():? # 導入:

????????# 取參數

? ????????? text = request.args.get('text')

? ? ????????return json.dumps(text)

????????if __name__ == '__main__':

? ? ????????app.run(debug=True,port=5000)

然后執行 python run.py 就可以在本地的5000端口看到helloworld界面了。

Gunicorn

這是一個被廣泛使用的高性能的Python WSGI UNIX HTTP服務器,也有人選擇uWsgi可以達到同樣的效果。

首先安裝:

pip install gunicorn

然后在flask 配置文件中添加如下代碼:

????????from werkzeug.contrib.fixers import ProxyFix

? ? ????????app.wsgi_app = ProxyFix(app.wsgi_app)

這時候便在flask工程中引入了wsgi代理。gunicorn支持多種worker模式,包括:

1 sync - 默認,使用同步阻塞的網絡模型

2 gevent - Requires gevent >= 0.13

3 tornado - Requires tornado >= 0.2 等

本教程選用gevent模式:

pip install gevent

使用下面命令便可通過gunicorn啟動flask:

gunicorn -w 4 -b 0.0.0.0:5000 -k gevent run:app

(-w 4 表示啟動4個worker -k gevent 表示選擇gevent模式)

Nginx的對應配置?詳見本博客另一篇教程,簡單說就是把5000端口映射到nignx代理就行了,就可以實現通過nginx轉發http請求。

supervisor?服務端運維的重點,系統中各類進程的守護者。由于不支持python3的環境,所以配置會稍微麻煩一點,我們需要通過virtualenv 創建一個python2虛擬環境。

pip install virtualenv

首先在自定義目錄下創建 super 虛擬環境

virtualenv --distribute -p /usr/bin/python2 super

cd super

source bin/activate? ? #激活虛擬環境

./bin/pip install supervisor# 安裝supervier

echo_supervisord_conf > supervisor.conf? # 生成 supervisor 默認配置文件

#熱后便可以通過以下命令對supervisor進行操作:

supervisord -c supervisor.conf #通過配置文件啟動supervisor

supervisorctl -c supervisor.conf status #察看supervisor的狀態

supervisorctl -c supervisor.conf reload 重新載入 #配置文件

supervisorctl -c supervisor.conf start [all]|[appname] #啟動指定/所有 supervisor管理的程序進程

supervisorctl -c supervisor.conf stop [all]|[appname] 關閉指定/所有 supervisor管理的程序進程

supervisor.conf中配置對應的gunicorn應用,其他類型的應用配置也類似,比如java的springboot。

[program:start_gunicorn]

command=/your/bin/path/to/gunicorn -w 4 -b 0.0.0.0:5000 -k gevent run:app

directory:/home/ubuntu/project/test1/ #run.py所在的目錄

autostart=true

redirect_stderr=true

user=root

directory=/usr/local/qs-project/web

stdout_logfile=/var/log/test_test.log

如果要啟用supervisor的web端:9001端口.

需要注釋掉 配置文件中

[inet_http_server] 的所有子配置項

以及

[supervisorctl] 中的前四項

deactivate? #退出環境

至此,Flask的服務端部署教程結束。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容