1. 程式人生 > 實用技巧 >Nginx+uwsgi+Django部署

Nginx+uwsgi+Django部署

Nginx+uwsgi+Django部署

術語簡介

web框架

  • Web應用框架有助於減輕網頁開發時共通性活動的工作負荷,例如許多框架提供資料庫訪問介面、標準樣板以及會話管理等,可提升程式碼的可再用性。
  • Web應用框架(Web application framework)是一種開發框架,用來支援動態網站、網路應用程式及網路服務的開發。其型別有基於請求的和基於元件的兩種框架

web伺服器

  • web伺服器即用來接受客戶端請求,建立連線,轉發響應的程式,至於轉發的內容是什麼,交由web框架來處理,即處理這些業務邏輯。如查詢資料庫、生成實時資訊等。
  • Nginx就是一個web伺服器

uWSGI和WSGI

WSGI

簡介

全稱Python Web Server Gateway Interface,指定了web伺服器和Python web應用或web框架之間的標準介面,以提高web應用在一系列web伺服器間的移植性

  1. WSGI是一套介面標準協議/規範;
  2. 通訊(作用)區間是Web伺服器和Python Web應用程式之間;
  3. 目的是制定標準,以保證不同Web伺服器可以和不同的Python程式之間相互通訊

處理流程

  1. 接受使用者操作瀏覽器傳送的請求
  2. 接受使用者的請求轉發至對應的web伺服器
  3. web伺服器將請求轉交給web應用程式,web應用程式處理請求
  4. web應用將請求結果返回給web伺服器,由web伺服器返回使用者響應結果
  5. 瀏覽器收到響應,向用戶展示

產生背景

請求時Web伺服器需要和web應用程式進行通訊,但是web伺服器有很多種啊,Python web應用開發框架也對應多種啊,所以WSGI應運而生,定義了一套通訊標準。試想一下,如果不統一標準的話,就會存在Web框架和Web伺服器資料無法匹配的情況,那麼開發就會受到限制,這顯然不合理的。

uwsgi

WSGI一樣是一種通訊協議,是uWSGI伺服器的獨佔協議,用於定義傳輸資訊的型別(type of information),每一個uwsgi packet4byte為傳輸資訊型別的描述,與WSGI協議是兩種東西,據說該協議是fcgi協議的10倍快。

uWSGI

  1. 是一個web伺服器,實現了WSGI協議、uwsgi協議、http協議等。
  2. WSGI協議主要包括serverapplication兩部分:

部署流程

專案部署

uWSGI

安裝

pip install uwsgi

啟動檔案

[uwsgi]
#使用nginx連線時使用
socket=10.1.1.1:9999	# ip和埠

#專案目錄
chdir=/root/projects/dayfresh
#專案中wsgi.py檔案的目錄,相對於專案目錄
wsgi-file=dayfresh/wsgi.py
# 程序數
processes = 4
# 執行緒數
threads = 2
# uwsgi伺服器的角色
master = True
pidfile=pidfile/uwsgi.pid	# uwsgi的pid生成檔案
daemonize=daemonize/uwsgi.log	# 日誌檔案
virtualenv=/root/project/.virtualenv/dailyfresh

啟動

uwsgi --ini uwsgi.ini 	# 啟動py


(dailyfresh) [root@SR dayfresh]# ps -aux | grep uwsgi	# 檢視uwsgi

收集python靜態檔案

 python3.6 manage.py collectstatic 	# 收集django所需的靜態檔案

Nginx

server {
        listen       80;
        server_name  10.1.1.6;	# 監聽地址

    

        location / {
          
            include uwsgi_params;
            uwsgi_pass 127.0.0.1:9999;	# 與uwsgi中的地址埠一樣
        }
        
        location /static {
       		 alias /var/www/html/dailyfresh/static/;	# 靜態檔案
        }
}	
(dailyfresh) [root@SR dayfresh]# nginx -t	# 檢視配置是否有錯誤

(dailyfresh) [root@SR dayfresh]# nginx -s reload	# 重啟nginx服務