Nginx+uwsgi+Django部署
阿新 • • 發佈:2020-12-15
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伺服器間的移植性
- WSGI是一套介面標準協議/規範;
- 通訊(作用)區間是Web伺服器和Python Web應用程式之間;
- 目的是制定標準,以保證不同Web伺服器可以和不同的Python程式之間相互通訊
處理流程
- 接受使用者操作瀏覽器傳送的請求
- 接受使用者的請求轉發至對應的web伺服器
- web伺服器將請求轉交給web應用程式,web應用程式處理請求
- web應用將請求結果返回給web伺服器,由web伺服器返回使用者響應結果
- 瀏覽器收到響應,向用戶展示
產生背景
請求時Web伺服器需要和web應用程式進行通訊,但是web伺服器有很多種啊,Python web應用開發框架也對應多種啊,所以WSGI應運而生,定義了一套通訊標準。試想一下,如果不統一標準的話,就會存在Web框架和Web伺服器資料無法匹配的情況,那麼開發就會受到限制,這顯然不合理的。
uwsgi
與WSGI
一樣是一種通訊協議,是uWSGI
伺服器的獨佔協議,用於定義傳輸資訊的型別(type of information
),每一個uwsgi packet
前4byte
為傳輸資訊型別的描述,與WSGI協議是兩種東西,據說該協議是fcgi
協議的10倍快。
uWSGI
- 是一個
web
伺服器,實現了WSGI
協議、uwsgi
協議、http
協議等。 WSGI
協議主要包括server
和application
兩部分:
部署流程
專案部署
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服務