溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Django+Uwsgi+Nginx怎么實現(xiàn)生產(chǎn)環(huán)境部署

發(fā)布時間:2021-05-21 10:28:44 來源:億速云 閱讀:162 作者:小新 欄目:開發(fā)技術(shù)

小編給大家分享一下Django+Uwsgi+Nginx怎么實現(xiàn)生產(chǎn)環(huán)境部署,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

uwsgi介紹

uWSGI是一個Web服務(wù)器,它實現(xiàn)了WSGI協(xié)議、uwsgi、http等協(xié)議。Nginx中HttpUwsgiModule的作用是與uWSGI服務(wù)器進(jìn)行交換。

要注意 WSGI / uwsgi / uWSGI 這三個概念的區(qū)分。

WSGI是一種Web服務(wù)器網(wǎng)關(guān)接口。它是一個Web服務(wù)器(如nginx,uWSGI等服務(wù)器)與web應(yīng)用(如用Flask框架寫的程序)通信的一種規(guī)范。

uwsgi是一種線路協(xié)議而不是通信協(xié)議,在此常用于在uWSGI服務(wù)器與其他網(wǎng)絡(luò)服務(wù)器的數(shù)據(jù)通信。

而uWSGI是實現(xiàn)了uwsgi和WSGI兩種協(xié)議的Web服務(wù)器。

uwsgi協(xié)議是一個uWSGI服務(wù)器自有的協(xié)議,它用于定義傳輸信息的類型(type of information),每一個uwsgi packet前4byte為傳輸信息類型描述,它與WSGI相比是兩樣?xùn)|西。

安裝uwsgi

pip install uwsgi

uwsgi不支持windows

測試啟動

創(chuàng)建測試文件并寫入:

def application(environ, start_response): 
status = '200 OK' 
output = 'Hello World! powerde by wsgi' 
response_headers = [('Content-type', 'text/plain'),
('Content-Length', str(len(output)))] 
start_response(status, response_headers)
return [output.encode('utf8'),]

執(zhí)行命令:

uwsgi --http :8080 --file test.py

瀏覽器訪問該端口,正常情況下能得到輸出。

用 uwsgi 啟動django

uwsgi --http :8080 --file django_project/wsgi.py

頁面能訪問,但是靜態(tài)文件無法加載,需要

uwsgi --http :8080 --file django_project/wsgi.py --static-map=/static=static

靜態(tài)文件就能加載了。

參數(shù)說明:

  • http 這個就和 runserver 一樣指定 IP 端口

  • file 這個文件就里有一個反射,如果你在調(diào)用他的時候沒有指定Web Server就使用默認(rèn)的

  • static 做一個映射,指定靜態(tài)文件

uwsgi配置文件啟動django項目

uwsgi 支持的參數(shù)還挺多的,可以將他們寫在配置文件中。在項目同級目錄創(chuàng)建 uwsgi.ini 文件:

# uwsig使用配置文件啟動
[uwsgi]
# 項目目錄
chdir=/opt/webvirtcloud/
# 指定項目的application
module=webvirtcloud.wsgi:application
# 指定sock的文件路徑 
socket=/tmp/uwsgi.sock
# 進(jìn)程個數(shù) 
workers=5
pidfile=/tmp/uwsgi.pid
# 指定IP端口 
http=0.0.0.0:8080 # 如果和ngxin結(jié)合,本行注釋掉
# 指定靜態(tài)文件
static-map=/static=/opt/webvirtcloud/static
# 啟動uwsgi的用戶名和用戶組
uid=root
gid=root
# 啟用主進(jìn)程
master=true
# 自動移除unix Socket和pid文件當(dāng)服務(wù)停止的時候
vacuum=true
# 序列化接受的內(nèi)容,如果可能的話
thunder-lock=true
# 啟用線程
enable-threads=true
# 設(shè)置自中斷時間
harakiri=30
# 設(shè)置緩沖
post-buffering=4096
# 設(shè)置日志目錄
daemonize=/var/log/uwsgi.log

更多參數(shù)可見: https://uwsgi-docs.readthedocs.io/en/latest/Options.html

執(zhí)行命令: uwsgi --ini uwsgi.ini ,命令都不再用shell終端,即使斷開shell連接,頁面仍然能訪問。

那要如何關(guān)閉或重啟它呢?

uwsgi --stop /tmp/uwsgi.pid

配置nginx

找到Nginx的配置文件,用虛擬域名的就在虛擬域名里寫:

server {
listen 80;
server_name localhost;

location / { 
include uwsgi_params;
uwsgi_pass 127.0.0.1:8080; //必須和uwsgi中socket的設(shè)置一致
client_max_body_size 35m;
}
}

以上是“Django+Uwsgi+Nginx怎么實現(xiàn)生產(chǎn)環(huán)境部署”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI