網上有不少種發佈部署flask的方式,這裏我使用的是Gunicorn、nginx發佈flask。python
先說明一下爲何不使用supervisor,以前我也是按照一些文章中的推薦採起nginx、gunicorn和supervisor的方式部署。但當我部署成功後,我發現了一個問題。linux
寫到這裏先介紹一下supervisor是什麼:網上正規的解釋爲supervisor是linux進程管理的工具。而我將其理解爲其對gunicorn命令封裝後的工具(固然不僅是針對gunicorn,像nginx也能夠用其管理,這裏是爲了方便理解)。若是用supervisor啓動flask,那麼能夠當作:supervisor調用gunicorn把flask的服務啓動。nginx
再說回問題:當我用supervisor的命令啓動服務時,發現nginx的正則表達式的url路徑轉發規則發生了問題。致使訪問url地址發生跳轉不正常和404錯誤的現象。固然錯誤的緣由不排除我安裝配置的緣由,這裏不作詳細的解釋,只是我沒有解決其問題。但就像以前介紹的supervisor只是對進程的管理工具(也能夠理解爲對gunicorn命令的封裝),並不對服務自己有什麼影響,只是平常啓動、重啓、中止服務時命令行多了一些而已罷了。正則表達式
ok,下面說回正題,介紹如何部署flask。flask
這些前置工做這裏就不介紹了,網絡上有不少文檔和詳細的步驟能夠參考。api
建立一個文件夾test,在該文件夾建立test.py文件網絡
mkdir test cd test touch test.py
編寫一個簡單的例子app
#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)
最新版的virtualenv自帶了gunicorn,若是沒有,請在虛擬環境手動安裝工具
pip install gunicorn
進入剛建立的項目文件夾下,用命令行啓動url
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
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; }