Python - gunicorn 部署Flask
一、 gunicorn介紹
1.1 gunicorn
gunicorn是一個python Wsgi http server,只支持在Unix系統(tǒng)上運行,來源于Ruby的unicorn項目。
Gunicorn使用prefork master-worker模型(在gunicorn中,master被稱為arbiter),能夠與各種wsgi web框架協(xié)作。
1.2 WSGI協(xié)議
Web框架致力于如何生成HTML代碼,而Web服務(wù)器用于處理和響應(yīng)HTTP請求。
Web框架和Web服務(wù)器之間的通信,需要一套雙方都遵守的接口協(xié)議。WSGI協(xié)議就是用來統(tǒng)一這兩者的接口的。
常用的WSGI容器有Gunicorn和uWSGI,但Gunicorn直接用命令啟動,不需要編寫配置文件,相對uWSGI要容易很多。
二、gunicorn安裝和使用
2.1 安裝
gunicorn安裝非常簡單,使用命令pip install gunicorn即可。一般使用它,主要是為使用其異步的worker模型,還需要安裝對應(yīng)的異步模塊。
$ pip install greenlet # 使用異步必須安裝
$ pip install eventlet # 使用eventlet workers $ pip install gevent # 使用gevent workers
2.2 使用
使用gunicorn來部署一個flask項目舉例,保存為wsgi.py
from flask import Flask app = Flask(__name__) # Debug模式 app.config['DEBUG'] = False @app.route("/") def hello(): return "Hello World!"
關(guān)于 debug = True:
生產(chǎn)環(huán)境不需要這個配置項,但調(diào)試的時候還是挺好用的。而且,開啟debug項后,在啟動gunicorn的時候可以看到所有可配置項的配置。
gunicorn通常使用的參數(shù)如下:
-c CONFIG, --config=CONFIG # 設(shè)定配置文件。 -b BIND, --bind=BIND # 設(shè)定服務(wù)需要綁定的端口。建議使用HOST:PORT。 -w WORKERS, --workers=WORKERS # 設(shè)置工作進程數(shù)。建議服務(wù)器每一個核心可以設(shè)置2-4個。 -k MODULE # 選定異步工作方式使用的模塊。 --log-level LEVEL # 錯誤日志輸出等級。 --capture-output # 重定向到錯誤日志。 --enable-stdio-inheritance # 啟用stdio繼承
# Ex: gunicorn wsgi:app -w 4 -b 0.0.0.0:5000 --log-level debug --capture-output --enable-stdio-inheritance
# 結(jié)束gunicorn進程,只需要kill命令殺死即可。
ps -ef | grep gunicorn
注意:linux通常會禁止綁定使用1024以下的端口,除非在root用戶權(quán)限。很多人在使用gunicorn時試圖將其綁定到80或者443端口,發(fā)現(xiàn)無效就是這個原因。

浙公網(wǎng)安備 33010602011771號