用uWSGI和Nginx部署Flask專案

〆 小源。發表於2019-05-04

概況

在開發過程中,我們一般直接用Python命令直接執行Flask程式。這樣的執行只適合我們開發,方便我們除錯。一旦程式部署到線上,這樣執行的Flask程式效能會比較低。可以採用uWSGI+Nginx進行部署。

uWSGI

在部署之前,我們得先了解幾個概念

  • wsgi web應用程式之間的介面。它的作用就像是橋樑,連線在web伺服器和web應用框架之間。

  • uwsgi 是一種傳輸協議,用於定義傳輸資訊的型別。

  • uWSGI 是實現了uwsgi協議WSGI的web伺服器。

部署

首先準備一個flask程式,名字run.py

from flask import Flask

app = Flask(__name__)

@app.route("/")
def index():
    return '部署'

if __name__ == '__main__':
    app.run()
複製程式碼

安裝uWSGI

 pip install uwsgi
複製程式碼

在專案的目錄建立一個uwsgi的配置檔案

[uwsgi]
#配合nginx使用
socket = 127.0.0.1:8000
#專案路徑 /Users/xiaoyuan/Desktop/flask_test
chdir           = 自己專案路徑
#wsgi檔案 run就是flask啟動檔案去掉字尾名 app是run.py裡面的Flask物件 
module          = run:app
#指定工作程式
processes       = 4
#主程式
master          = true
#每個工作程式有2個執行緒
threads = 2
#指的後臺啟動 日誌輸出的地方
daemonize       = uwsgi.log
#儲存主程式的程式號
pidfile = uwsgi.pid
#虛擬環境環境路徑
virtualenv = /Users/xiaoyuan/.virtualenvs/flask_test
複製程式碼

然後配置Nginx,找到Nginx的配置檔案nginx.conf,在http塊下加上下面程式碼

server {
	# 監聽埠
    listen 80;
    # 監聽ip 換成伺服器公網IP
    server_name 127.0.0.1;
 
	#動態請求
	location / {
	  include uwsgi_params;
	  uwsgi_pass 127.0.0.1:8000;
	}
	#靜態請求
	location /static {
		alias /Users/xiaoyuan/Desktop/flask_test/static;

	}
}
複製程式碼

啟動

啟動uWSGI

uwsgi --ini uwsgi.ini
複製程式碼

啟動Nginx

/etc/init.d/nginx start
複製程式碼

然後訪問Nginx監聽的IP,由於我在本地部署,就直接訪問http://127.0.0.1:80/

在這裡插入圖片描述

其他命令

  • uwsgi重啟
uwsgi --reload uwsgi.pid
複製程式碼
  • uwsgi停止
uwsgi --stop uwsgi.pid
複製程式碼

歡迎關注我的公眾號:

image

相關文章