flask筆記:部署flask

weixin_33766168發表於2018-03-07

網上有很多種釋出部署flask的方式,這裡我使用的是Gunicorn、nginx釋出flask。

先說明一下為什麼不使用supervisor,之前我也是按照一些文章中的推薦採取nginx、gunicorn和supervisor的方式部署。但當我部署成功後,我發現了一個問題。

寫到這裡先介紹一下supervisor是什麼:網上正規的解釋為supervisor是linux程式管理的工具。而我將其理解為其對gunicorn命令封裝後的工具(當然不只是針對gunicorn,像nginx也可以用其管理,這裡是為了方便理解)。

如果用supervisor啟動flask,那麼可以看成:supervisor呼叫gunicorn把flask的服務啟動。

再說回問題:當我用supervisor的命令啟動服務時,發現nginx的正規表示式的url路徑轉發規則發生了問題。導致訪問url地址發生跳轉不正常和404錯誤的現象。當然錯誤的原因不排除我安裝配置的原因,這裡不做詳細的解釋,只是我沒有解決其問題。但就像之前介紹的supervisor只是對程式的管理工具(也可以理解為對gunicorn命令的封裝),並不對服務本身有什麼影響,只是日常啟動、重啟、停止服務時命令列多了一些而已罷了。

ok,下面說回正題,介紹如何部署flask。

1.安裝python、virtualenv、flask、nginx

這些前置工作這裡就不介紹了,網路上有很多文件和詳細的步驟可以參考。

2.建立專案

建立一個資料夾test,在該資料夾建立test.py檔案

mkdir test
cd test
touch test.py

編寫一個簡單的例子

#encoding:utf-8

from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    return 'hello woody'

@app.route('/test/')
def test():
    return 'test'

@app.errorhandler(404) 
def page_not_found(error): 
    return 'sorry that is my 404'

#if __name__ == '__main__':
#    app.run(host='0.0.0.0',port=5000,debug=True)

3.安裝gunicorn

最新版的virtualenv自帶了gunicorn,如果沒有,請在虛擬環境手動安裝

 pip install gunicorn

4.啟動flask

進入剛建立的專案資料夾下,用命令列啟動

cd test
gunicorn -w2 -b0.0.0.0:9016 test:app
-w指的是worker(啟動的程式),後面跟的數字是worker的數量

-b指的是bind(繫結ip),後面是ip:port地址和埠號,0.0.0.0代表所有地址

test指的是入口檔案的檔名

app指的是入口檔案中Flask()物件的變數名,這裡上面的程式中是app

注:如果想靜默啟動(後臺啟動),可以在後面加個 -D 的引數

gunicorn -w2 -b0.0.0.0:9016 test:app -D

5.nginx配置

location /api/ {
    proxy_pass http://127.0.0.1:9016/;
    #proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

相關文章