天天看點

部署flask

部署

當我們執行下面的hello.py時,使用的flask自帶的伺服器,完成了web服務的啟動。在生産環境中,flask自帶的伺服器,無法滿足性能要求,我們這裡采用Gunicorn做wsgi容器,來部署flask程式。Gunicorn(綠色獨角獸)是一個Python WSGI的HTTP伺服器。從Ruby的獨角獸(Unicorn )項目移植。該Gunicorn伺服器與各種Web架構相容,實作非常簡單,輕量級的資源消耗。Gunicorn直接用指令啟動,不需要編寫配置檔案,相對uWSGI要容易很多。

區分幾個概念:

WSGI:全稱是Web Server Gateway Interface(web伺服器網關接口),它是一種規範,它是web伺服器和web應用程式之間的接口。它的作用就像是橋梁,連接配接在web伺服器和web應用架構之間。

uwsgi:是一種傳輸協定,用于定義傳輸資訊的類型。

uWSGI:是實作了uwsgi協定WSGI的web伺服器。

我們的部署方式: nginx + gunicorn + flask

# hello.py

from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
    return '<h1>hello world</h1>'

if __name__ == '__main__':
    app.run(debug=True)      

使用Gunicorn:

web開發中,部署方式大緻類似。簡單來說,前端代理使用Nginx主要是為了實作分流、轉發、負載均衡,以及分擔伺服器的壓力。Nginx部署簡單,記憶體消耗少,成本低。Nginx既可以做正向代理,也可以做反向代理。

正向代理:請求經過代理伺服器從區域網路發出,然後到達網際網路上的伺服器。

特點:服務端并不知道真正的用戶端是誰。

反向代理:請求從網際網路發出,先進入代理伺服器,再轉發給區域網路内的伺服器。

特點:用戶端并不知道真正的服務端是誰。

差別:正向代理的對象是用戶端。反向代理的對象是服務端。

安裝gunicorn

pip install gunicorn
           

檢視指令行選項: 安裝gunicorn成功後,通過指令行的方式可以檢視gunicorn的使用資訊。

$gunicorn -h
           

直接運作:

#直接運作,預設啟動的127.0.0.1::8000
gunicorn 運作檔案名稱:Flask程式執行個體名
           

指定程序和端口号: -w: 表示程序(worker)。 -b:表示綁定ip位址和端口号(bind)。

$gunicorn -w 4 -b 127.0.0.1:5001 運作檔案名稱:Flask程式執行個體名
           

安裝Nginx

$ sudo apt-get install nginx
           

Nginx配置:

預設安裝到/usr/local/nginx/目錄,進入目錄。

啟動nginx:

#啟動
sudo sbin/nginx
#檢視
ps aux | grep nginx
#停止
sudo sbin/nginx -s stop
           

打開/usr/local/nginx/conf/nginx.conf檔案

server {
    # 監聽80端口
    listen 80;
    # 本機
    server_name localhost; 
    # 預設請求的url
    location / {
        #請求轉發到gunicorn伺服器
        proxy_pass http://127.0.0.1:5001; 
        #設定請求頭,并将頭資訊傳遞給伺服器端 
        proxy_set_header Host $host; 
    }
}           

努力成為一個開發者

個人站點:www.pythonav.cn

繼續閱讀