天天看點

24. Django部署:項目部署

一、基礎概念

項目部署是指在軟體開發完成後,将開發機器上運作的軟體實際安裝到伺服器上進行長期運作

在安裝機器上安裝和配置同版本的環境【py、資料庫等】

django項目遷移

用<code>uWSGI</code>代替<code>python3 manage.py runserver</code>方法啟動伺服器

配置nginx反向代理伺服器

用nginx配置靜态檔案路徑,解決靜态路徑問題

二、uWSGI網關接口配置

WSGI(Python Web Server Gateway Interface)Web伺服器網關接口,是Python應用程式或架構和Web伺服器之間的一種接口,被廣泛使用

使用<code>python3 manage.py runserver</code>通常隻在開發和測試環境中使用

當開發結束後,完善的項目代碼需要在一個高效穩定的環境中運作,這時可以使用WSGI

24. Django部署:項目部署
24. Django部署:項目部署

uWSGI是WSGI的一種,它實作了HTTP協定WSGI協定以及uwsgi協定

uWSGI協定功能完善,支援協定衆多,在python web圈熱度極高

uWSGI學習以學習配置為主

Ubuntu執行:

24. Django部署:項目部署

檢查是否成功安裝

如果成功安裝,則會輸出<code>uWSGI==2.0.18</code>

24. Django部署:項目部署

添加配置檔案<code>項目同名檔案夾/uwsgi.ini</code>

如:mysite7/mysite7/uwsgi.ini

24. Django部署:項目部署

檔案以<code>[uwsgi]</code>開頭,有如下配置項:

套接字方式的 IP位址:端口号 【此模式需要有nginx】:socket=127.0.0.1:8000

Http通信方式的 IP位址:端口号:http=127.0.0.1:8000

項目目前工作目錄:chdir=/home/tarena/…/my_project

項目中wsgi.py檔案的目錄,相對于目前工作目錄【相對路徑】:wsgi-file=my_project/wsgi.py

程序個數:process=4

每個程序的線程個數:threads=2

服務的pid記錄檔案:pidfile=uwsgi.pid

服務的日志檔案位置:daemonize=uwsgi.log

開啟主程序管理模式:master=true

24. Django部署:項目部署

特殊說明:Django的setting.py需要做如下配置

修改setting.py将DEBUG=True改為DEBUG=False

修改setting.py将ALLOWED_HOSTS=[]改為ALLOWED_HOSTS = [‘網站域名’] 或者 [‘服務監聽的ip位址’]

cd 到 uWSGI配置檔案所在目錄

24. Django部署:項目部署
24. Django部署:項目部署

無論是啟動還是關閉,都需要執行<code>ps aux|grep 'uwsgi'</code>确認是否符合預期

啟動成功後,程序在背景執行,所有日志均輸出在配置檔案所在目錄的<code>uwsgi.log</code>中

Django中代碼有任何修改,都需要重新啟動uwsgi

在浏覽器端輸入http://127.0.0.1:8000進行測試

注意:

此時端口8000被uWSGI程序監聽,而非runserver

如果目前有預期傳回,則uWSGI啟動成功

啟動失敗:端口被占用

原因:有其他程序占用uWSGI啟動的端口

解決方案:可執行<code>sudo lsof -i:端口号</code>查詢出具體程序,殺掉程序後,重新啟動uWSGI即可

停止失敗:stop無法關閉uWSGI

原因:重複啟動uWSGI,導緻pid檔案中的程序号失準

解決方案:ps出uWSGI程序,手動kill掉

三、Nginx

Nginx是輕量級的高性能Web伺服器,提供了諸如HTTP代理和反向代理、負載均衡等一系列重要特征

C語言編寫,執行效率高

Nginx作用

負載均衡,多台伺服器輪流處理請求

反向代理

原理:用戶端請求Nginx,再有Nginx将請求轉發uWSGI運作的Django

24. Django部署:項目部署

如果下載下傳速度很慢,考慮更換為國内源

安裝完畢後,ubuntu終端輸入<code>nginx -v</code>顯示如下:

24. Django部署:項目部署

修改nginx的配置檔案<code>/etc/nginx/site-enable/default;</code>sudo vim該檔案

<code>sudo vim /etc/nginx/site-enable/default</code>

24. Django部署:項目部署

一定帶有;

啟動 - <code>sudo /etc/init.d/nginx start</code>

停止 - <code>sudo /etc/init.d/nginx stop</code>

重新開機 - <code>sudo /etc/init.d/nginx restart</code>

注意:nginx配置隻要修改,就需要進行重新開機,否則配置不生效

24. Django部署:項目部署

說明nginx負責接收請求,并把請求轉發給後面的uWSGI

此模式下,uWSGI需要以socket模式啟動

樣例:

24. Django部署:項目部署
24. Django部署:項目部署

uWSGI配置變化後,也需要重新開機

24. Django部署:項目部署

四、nginx + uwsgi排錯

排錯問題宗旨 → 看日志!看日志!看日志

nginx日志位置:

異常資訊 <code>/var/log/nginx/error.log</code>

正常通路資訊<code>/var/log/nginx/access.log</code>

uwsgi日志位置:

項目同名目錄下,uwsgi.log

通路127.0.0.1:80位址,502響應

502響應,代表Nginx反向代理配置成功,但是對應的uWSGI未啟動

通路127.0.0.1:80/url,404響應

路由的确不在Django配置中

Nginx配置錯誤,未禁止掉try_files

五、Nginx靜态檔案配置

建立新路徑,主要存放Django所有靜态檔案。

如:/home/tarena/項目名_static/

24. Django部署:項目部署

在Django setting.py中添加新配置

24. Django部署:項目部署

進入項目,執行

執行該指令後,Django将項目中所有的靜态檔案複制到STATIC_ROOT中,包括Django内建的靜态檔案

24. Django部署:項目部署

Nginx配置中添加新配置

24. Django部署:項目部署
24. Django部署:項目部署

重新開機Nginx

24. Django部署:項目部署

六、404/500界面

定義和配置

在模闆檔案夾内添加404.html模闆,當視圖出發HTTP404異常時将會被顯示

404.html僅在釋出版(即setting.py中的DEBUG=False時)才起作用

當響應處理函數出發HTTP404異常時就會跳轉到404界面

七、郵箱告警

當正式伺服器上代碼運作有報錯時,可以将錯誤追溯資訊發送至指定的郵箱

setting.py中 - 在基礎郵箱授權後 添加如下配置:

八、過濾敏感資訊

報錯郵件中會顯示一些錯誤的追蹤,這些錯誤追蹤會出現如password等敏感資訊,Django已經将配置檔案中的敏感資訊過濾修改為多個星号,但是使用者自定義的視圖函數需要使用者手動過濾敏感資訊

可過濾資訊如下:

局部變量

POST送出資料

說明:

若報錯郵件中牽扯到user、pw、cc等局部變量的值,則會将其替換成*****,而name變量還顯示其真實值

多個裝飾器時,需要将其放在最頂部

若不傳參數,則過濾所有局部變量的值

繼續閱讀