一、基礎概念
項目部署是指在軟體開發完成後,将開發機器上運作的軟體實際安裝到伺服器上進行長期運作
在安裝機器上安裝和配置同版本的環境【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

uWSGI是WSGI的一種,它實作了HTTP協定WSGI協定以及uwsgi協定
uWSGI協定功能完善,支援協定衆多,在python web圈熱度極高
uWSGI學習以學習配置為主
Ubuntu執行:
檢查是否成功安裝
如果成功安裝,則會輸出<code>uWSGI==2.0.18</code>
添加配置檔案<code>項目同名檔案夾/uwsgi.ini</code>
如:mysite7/mysite7/uwsgi.ini
檔案以<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
特殊說明:Django的setting.py需要做如下配置
修改setting.py将DEBUG=True改為DEBUG=False
修改setting.py将ALLOWED_HOSTS=[]改為ALLOWED_HOSTS = [‘網站域名’] 或者 [‘服務監聽的ip位址’]
cd 到 uWSGI配置檔案所在目錄
無論是啟動還是關閉,都需要執行<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
如果下載下傳速度很慢,考慮更換為國内源
安裝完畢後,ubuntu終端輸入<code>nginx -v</code>顯示如下:
修改nginx的配置檔案<code>/etc/nginx/site-enable/default;</code>sudo vim該檔案
<code>sudo vim /etc/nginx/site-enable/default</code>
一定帶有;
啟動 - <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配置隻要修改,就需要進行重新開機,否則配置不生效
說明nginx負責接收請求,并把請求轉發給後面的uWSGI
此模式下,uWSGI需要以socket模式啟動
樣例:
uWSGI配置變化後,也需要重新開機
四、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/
在Django setting.py中添加新配置
進入項目,執行
執行該指令後,Django将項目中所有的靜态檔案複制到STATIC_ROOT中,包括Django内建的靜态檔案
Nginx配置中添加新配置
重新開機Nginx
六、404/500界面
定義和配置
在模闆檔案夾内添加404.html模闆,當視圖出發HTTP404異常時将會被顯示
404.html僅在釋出版(即setting.py中的DEBUG=False時)才起作用
當響應處理函數出發HTTP404異常時就會跳轉到404界面
七、郵箱告警
當正式伺服器上代碼運作有報錯時,可以将錯誤追溯資訊發送至指定的郵箱
setting.py中 - 在基礎郵箱授權後 添加如下配置:
八、過濾敏感資訊
報錯郵件中會顯示一些錯誤的追蹤,這些錯誤追蹤會出現如password等敏感資訊,Django已經将配置檔案中的敏感資訊過濾修改為多個星号,但是使用者自定義的視圖函數需要使用者手動過濾敏感資訊
可過濾資訊如下:
局部變量
POST送出資料
說明:
若報錯郵件中牽扯到user、pw、cc等局部變量的值,則會将其替換成*****,而name變量還顯示其真實值
多個裝飾器時,需要将其放在最頂部
若不傳參數,則過濾所有局部變量的值