網上有很多種釋出部署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;
}