首頁 > 軟體

Nginx Gunicorn flask專案部署思路分析詳解

2022-12-09 14:04:34

部署目的

之前聊了很多flask的知識點,那麼完成一個flask專案之後,該這麼讓大家使用呢,直接放到本地,還是需要放到伺服器上,放到伺服器上又這麼操作的呢,那麼我們今天來聊聊flask專案部署。

首先在這裡需要了解部署的目的,是讓所有人或者指定的人可以存取到這個專案,並且可以更高效的提供服務給使用者,這裡就有些需要思考的關鍵點了:

  • 1、需要7*24不間斷的提供服務,家用的筆記型電腦或者桌上型電腦是不夠的。
  • 2、需要提供給指定的人或者所有人看,就需要將專案放到大家可以存取到的伺服器。
  • 3、任何使用者請求伺服器都希望得到快速高效的服務,所以伺服器的效率是一個很關鍵的點。
  • 4、還需要注意網站的安全,為使用者提供服務的同時需要保證使用者和網站的資料都是安全的。

然後基於這些點對比開發過程當中Flask自帶的輕量級伺服器很容易就發現了一些我們需要注意的點:

  • 1、開發一般是基於windows的個人電腦,這個環境開發和簡單的單元測試是沒有問題的,但是如果要進行專案的執行是不夠的,所以最好使用linux伺服器(當然windows也有伺服器版本)。
  • 2、Flask伺服器預設監聽127.0.0.1:5000,這個地址是本機地址,外網存取不到,需要修改,埠預設是5000,http預設是80也是可以修改的項。
  • 3、flask自帶的輕量級web伺服器預設是單執行緒的,最大並行支援200,這樣的並行支援顯然無法提供更好的服務,所以可以通過nginx或者其他web伺服器來提高伺服器的效能。
  • 4、flask開發的時候為了方便會開啟debug偵錯模式,偵錯模式下,如果發生伺服器端錯誤的時候會把發生錯誤的程式碼和觸發流程都展示出來,這樣很方便偵錯和排錯,但是也容易導致程式碼被使用者看到,引發安全問題,所以需要關閉偵錯模式。

部署思路

基本的部署思路是採用nginx作為和前端進行互動的伺服器,因為,Nginx (engine x) 是一個高效能的HTTP和反向代理web伺服器,同時也提供了IMAP/POP3/SMTP服務。nginx除了單點具備高效能的特點之外,也可以很方便的進行叢集設定,比如:結合keepalive實現高可用,或者基於nginx和反向代價服務叢集都是很方便的。

Gunicorn 伺服器作為 wsgi app 的容器,能夠與各種 Web 框架相容(flask,django 等),得益於 gevent 等技術,使用 Gunicorn 能夠在基本不改變 wsgi app 程式碼的前提下,大幅度提高 wsgi app 的效能。

所以基於這樣的策略,可以讓nginx指向gunicorn,gunicorn指向flask來做高效能部署,當然也可以直接使用gunicorn+flask部署,但是不建議nginx+flask部署,畢竟flask本身的效能是一個很大的瓶頸。

假如專案是main.py

from flask import Flask
app = Flask(__name__)
@app.route("/")
def index():
    return "Hello Flask"
# 如果用gunicorn的話,那麼必須這麼寫不然的話,會提示找不到
if __name__ == '__main__':
    app.run()

gunicorn啟動flask

安裝gunicorn

pip3 install gunicorn #安裝gunicorn
ln -s /usr/local/python3/bin/gunicorn /usr/bin/gunicorn #設定環境變數

使用命令啟動專案

gunicorn -w 4 -b 0.0.0.0:8080 main:app #main檔案下的app變數

-w 4 使用4個worker程序執行服務

-b 0.0.0.0:8080 繫結當前伺服器所有ip的8080埠

使用設定

config.py

workers = 5        # 定義同時開啟的處理請求的程序數量,根據網站流量適當調整
worker_class = "gevent"  # 採用gevent庫,支援非同步處理請求,提高吞吐量
bind = "127.0.0.1:8000"   # 這裡8080可以隨便調整

常用設定

引數描述
debug是否開啟debug模式,部署選false
bind存取地址
workers工作程序數
threads工作執行緒數
timeout超時時間
loglevel輸出紀錄檔級別
pidfile執行紀錄檔路徑
accesslog存取紀錄檔路徑
errorlog錯誤紀錄檔路徑

載入組態檔啟動專案

gunicorn -c config.py main:app

nginx指向gunicorn

nginx安裝這裡就不詳細解釋了,直接聊設定吧(預設組態檔位置:/usr/local/nginx/conf/nginx.conf

upstream flask{
    server 127.0.0.1:8000;
} #這裡可以新增多個地址,也就是可以指向多個gunicorn伺服器,
server {
    # 監聽80埠
    listen 80;
    # 本機
    server_name localhost; 
    # 預設請求的url
    location / {
        #請求轉發到gunicorn伺服器
        proxy_pass http://flask; 
        #設定請求頭,並將頭資訊傳遞給伺服器端 
        proxy_set_header Host $host; 
    }
}

關於部署先聊這麼多,以上就是Nginx Gunicorn flask專案部署思路分析詳解的詳細內容,更多關於Nginx Gunicorn flask部署的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com