Django中Nginx和WSGI部署系列之十七

2021-08-04 15:09:47 字數 2182 閱讀 8043

當專案開發完成後,需要將專案**放到伺服器上,這個伺服器擁有固定的ip,再通過網域名稱繫結,就可以供其它人瀏覽,對於python web開發,可以使用wsgi、apache伺服器。

伺服器首先是物理上的一台效能高、線路全、執行穩定的機器,分為私有伺服器、公有伺服器。

私有伺服器:公司自己購買、自己維護,只佈署自己的應用,可供公司內部或外網訪問,成本高,需要專業人員維護,適合大公司使用。

公有伺服器:整合好運營環境,銷售空間或主機,供其佈署自己的應用,適合初創公司使用,成本低。

常用的公有伺服器,如阿里雲、青雲等,可按流量收費或按時間收費。伺服器還需要安裝伺服器軟體,此處需要uwsgi、nginx。

1)在本機進入虛擬環境,執行命令匯出當前需要的所有包。

pip freeze > plist.txt

2)通過ftp軟體將專案**和plist.txt檔案上傳到伺服器。

3)建立虛擬環境,在虛擬環境上安裝包。

mkvirtualenv 虛擬環境名稱

pip install -r plist.txt

uwsgi實現了wsgi的所有介面,是乙個快速、自我修復、開發人員和系統管理員友好的伺服器。uwsgi**完全用c編寫,效率高、效能穩定。

1)安裝uwsgi。

pip install uwsgi

2)配置uwsgi,在專案目錄下建立uwsgi.ini檔案,配置如下:

# 這句**必須加上

[uwsgi]

#使用nginx連線時使用

#socket=127.0.0.1:8080

#直接做web伺服器使用

#專案目錄

chdir=/home/xxoo

#專案中wsgi.py檔案的目錄,相對於專案目錄

wsgi-file=xxoo/wsgi.py

processes=4

threads=2

master=true

pidfile=uwsgi.pid

daemonize=uswgi.log

3)啟動。

uwsgi --ini uwsgi.ini

4)檢視。

ps ajx|grep uwsgi

5)停止。

uwsgi --stop uwsgi.pid

使用nginx的作用主要包括負載均衡、反向**。

使用方法如下:

tar zxvf nginx-1.6.3.tar.gz

2)進入nginx-1.6.3目錄,依次執行以下命令進行安裝。

./configure

make

sudo make install

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

cd /usr/local/nginx/

4)啟動。

sudo sbin/nginx

5)檢視程序。

ps ajx|grep nginx

6)停止。

sudo sbin/nginx -s stop

指向uwsgi專案

1)開啟conf/nginx.conf檔案。

sudo gedit conf/nginx.conf

2)在server節點下新增新的location項,指向uwsgi的ip與埠。

location /
**效果如下圖:

情景:使用者發起request,並等待response返回。在一些views中,可能需要執行一段耗時的程式,那麼使用者就會等待很長時間,造成不好的使用者體驗,比如傳送郵件、手機驗證碼等。

使用celery後,情況就不一樣了。解決:將耗時的程式放到celery中執行。

任務task:就是乙個python函式。

佇列queue:將需要執行的任務加入到佇列中。

工人worker:在乙個新程序中,負責執行佇列中的任務。

**人broker:負責排程,在布置環境中使用redis。

看下圖理解:

Web WCF和WS通過Nginx共享80埠

團隊中的乙個web專案面對的使用者網路環境多是在嚴格的防火牆安全條件下,通常只開放一些標準的埠如80,21等。上線初期,因忽略了這個問題,除了web應用是以80埠提供訪問外,wcf和ws是以其他埠進行對外訪問的,導致多數使用者無法完整的使用系統的全部功能,如涉及直接訪問wcf和ws服務的功能。同時加...

uwsgi和nginx部署Django服務

先用測試方式啟動服務 1.配置好資料庫 3.資料庫遷移 4.啟動服務 python manage.py runserver 0.0.0.0 8000 用uwsgi的方式啟動 解決3個問題 執行uwsgi啟動服務時,用的是python2直譯器,就用python3的直譯器重新裝了,解決參考文件 3.用命...

Django中session和cookie的用法

session 存在伺服器端,用request物件進行設定 設定session 在後端寫入 request.session money 100 缺省會在cookie中產生乙個sessionid 獲取session值 只能在後端獲取 print request.session.get money co...