使用gunicorn部署flask項目


使用gunicorn部署flask項目

1、WSGI協議

Web框架致力於如何生成HTML代碼,而Web服務器用於處理和響應HTTP請求。Web框架和Web服務器之間的通信,需要一套雙方都遵守的接口協議。WSGI協議就是用來統一這兩者的接口的。

2、WSGI容器

常用的WSGI容器有Gunicorn和uWSGI,但Gunicorn直接用命令啟動,不需要編寫配置文件,相對uWSGI要容易很多,所以這里我也選擇用Gunicorn作為容器。

3、gunicorn介紹

gunicorn是一個python Wsgi http server,只支持在Unix系統上運行,來源於Ruby的unicorn項目。Gunicorn使用prefork master-worker模型(在gunicorn中,master被稱為arbiter),能夠與各種wsgi web框架協作。

4、gunicorn安裝

gunicorn安裝非常簡單,使用命令pip install gunicorn即可。一般使用它,主要是為使用其異步的worker模型,還需要安裝對應的異步模塊。

$ pip install greenlet # 使用異步必須安裝
$ pip install eventlet # 使用eventlet workers
$ pip install gevent   # 使用gevent workers

5、gunicorn使用

這里使用gunicorn來部署一個flask項目舉例,此處flask框架的使用不過多闡述,不是本文的重點。

如下例子,保存為app.py

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

gunicorn通常使用的參數如下:

-c CONFIG, --config=CONFIG
# 設定配置文件。
-b BIND, --bind=BIND
# 設定服務需要綁定的端口。建議使用HOST:PORT。
-w WORKERS, --workers=WORKERS
# 設置工作進程數。建議服務器每一個核心可以設置2-4個。
-k MODULE
# 選定異步工作方式使用的模塊。

在shell中輸入你的啟動配置,比如:

$ gunicorn -w 3 -b 127.0.0.1:8080 app:app
# 此處app:app中,第一個app為flask項目實例所在的包,第二個app為生成的flask項目實例

這樣運行正常就可以啟動服務器了。

6、綁定端口

linux通常會禁止綁定使用1024以下的端口,除非在root用戶權限。很多人在使用gunicorn時試圖將其綁定到80或者443端口,發現無效。如果想綁定到這些端口,常見的有如下的幾種方法:

  • 使用Nginx代理轉發。
  • sudo啟動gunicorn。
  • 安裝額外的程序。

7、結束gunicorn服務進程

使用ps -ef | grep gunicorn命令找出gunicorn所有進程。

[root@VM_0_12_centos ~]# ps -ef | grep gunicorn
root     16843 23035  0 Oct14 ?        00:00:02 /root/Envs/myflask/bin/python3.6 /root/Envs/myflask/bin/gunicorn -w 3 -b 172.17.0.12:80 app:app
root     22445 23035  0 Oct04 ?        00:00:15 /root/Envs/myflask/bin/python3.6 /root/Envs/myflask/bin/gunicorn -w 3 -b 172.17.0.12:80 app:app
root     22581 23035  0 Oct11 ?        00:00:05 /root/Envs/myflask/bin/python3.6 /root/Envs/myflask/bin/gunicorn -w 3 -b 172.17.0.12:80 app:app
root     23035     1  0 Sep27 ?        00:04:11 /root/Envs/myflask/bin/python3.6 /root/Envs/myflask/bin/gunicorn -w 3 -b 172.17.0.12:80 app:app

然后使用 kill -9 進程ID 命令來殺掉進程,注意,我們找到主進程殺掉即可,子進程會隨之結束,在上例中,主進程號為23035.

[root@VM_0_12_centos ~]# kill -9 23035
[root@VM_0_12_centos ~]# ps -ef | grep gunicorn

殺掉進程后,稍等幾秒,再使用ps -ef | grep gunicorn查看,發現gunicorn服務進程已全部殺掉。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM