天天看點

Django(part52)--項目部署

學習筆記,僅供參考

文章目錄

  • ​​項目部署​​
  • ​​項目部署的幾個步驟​​
  • ​​安裝同版本的資料庫(略)​​
  • ​​django項目遷移​​
  • ​​安裝python​​
  • ​​安裝相同版本的包​​
  • ​​将目前項目源代碼複制到運程主機上(scp 指令)​​
  • ​​ssh遠端登入雲主機​​
  • ​​uWSGI 網關接口配置​​
  • ​​WSGI規範​​
  • ​​uWSGI網關接口配置​​
  • ​​安裝uWSGI​​
  • ​​配置uWSGI(這裡我用Windows示範)​​
  • ​​uWSGI的運作管理(Linux)​​
  • ​​nginx 反射代理配置​​
  • ​​nginx安裝​​
  • ​​nginx配置(Linux)​​
  • ​​修改uWSGI配置​​
  • ​​重新開機uWSGI服務(Linux)​​
  • ​​nginx的操作(Linux)​​
  • ​​nginx 配置靜态檔案路徑(Linux)​​

項目部署

我們在軟體開發完畢後,會把開發版的軟體安裝到伺服器上長期運作.

項目部署的幾個步驟

  1. 在伺服器上安裝和配置與開發階段同版本的資料庫;
  2. django項目遷移(在伺服器上配置與開發環境相同的python版本及依賴的包);
  3. 用​

    ​uwsgi​

    ​​ 替代​

    ​python manage.py runserver​

    ​ 方法啟動伺服器;
  4. 配置​

    ​nginx​

    ​ 反射代理伺服器;
  5. 用​

    ​nginx​

    ​ 配置靜态檔案路徑,解決靜态路徑問題。

安裝同版本的資料庫(略)

django項目遷移

安裝python
  • Linux
sudo apt install python3      
安裝相同版本的包
  • windows

導出目前子產品資料包的資訊:

pip freeze > requirements.txt      

導入到另一台新主機:

pip install -r requirements.txt      
  • Linux

導出目前子產品資料包的資訊:

pip3 freeze > package_list.txt      

導入到另一台新主機:

pip3 install -r package_list.txt      
将目前項目源代碼複制到運程主機上(scp 指令)
  • Linux
sudo scp -a 目前項目路徑 遠端主機位址和檔案夾路徑
#比如
sudo scp -a /home/goatbishop/mywebsite [email protected]/root/mydjango/      
ssh遠端登入雲主機
ssh [email protected]      

uWSGI 網關接口配置

WSGI規範
  • WSGI (Web Server Gateway Interface)是Python應用程式或架構和Web伺服器之間的一種接口規範(接口就是函數或對象);
  • WSGI 實作了WSGI協定、http等協定。
uWSGI網關接口配置

​python manage.py runserver​

​ 通常隻在開發和測試環境中使用,當開發結束後,完善的項目代碼需要在一個高效穩定的環境中運作,這時可以使用uWSGI.

uWSGI是WSGI規範的一種實作方式,它可以讓Django、Flask等開發的web站點運作在其中。

安裝uWSGI
  • Linux
sudo pip3 install uwsgi      
  • Windows
pip install uwsgi      

在Windows下pip會報出​

​AttributeError: module 'os' has no attribute 'uname​

​​’錯誤,這裡是解決辦法​​Windows系統安裝uWSGI報錯​​

配置uWSGI(這裡我用Windows示範)

在我們的項目檔案夾下建立一個​

​uwsgi.ini​

​ 檔案,在這個檔案中敲入如下代碼:

[uwsgi]
#套接字方式的 IP位址:端口号
socket=127.0.0.1:8000

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

#目前項目工作目錄(絕對路徑)
chdir=F:/MyStudio/PythonStudio/goatbishop.project01/Django/mywebsite_bookstore

#項目中wsgi.py檔案的目錄,相對路徑,相對于目前工作目錄
wsgi-file=mywebsite_bookstore/wsgi.py

#程序個數
process=4

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

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

#服務的目志檔案位置(在代碼中用print列印的資訊)
daemonize=uwsgi.log      

配置完uwsgi.ini,我們再配置settings.py,将DEBUG改為False,并将ALLOWED_HOSTS清單中增加​

​'*'​

​:

DEBUG = False
ALLOWED_HOSTS = ['*']
#表示允許所有人通路網站
#若清單中隻填入'192.168.1.*'則表示隻有這個網段才能通路咱們的網站
#注意這個*有點正則的意思      

進行上面一系列配置之後,我們再用python manage.py runserver開啟服務,并向網站發起請求(故意填一個無法通路的url),就看不到調試資訊了:

Django(part52)--項目部署

如果我們沒有對settings.py進行配置,也就是處于開發調試階段,那麼我們向http://127.0.0.1:8000/asdfg送出請求,我們是會看到如下頁面的:

Django(part52)--項目部署
uWSGI的運作管理(Linux)
  • Linux

啟動uwsgi:

cd 項目檔案夾
sudo uwsgi --ini 項目檔案夾/uwsgi.ini      

停止uwsgi:

cd 項目檔案夾
sudo uwsgi --stop uwsgi.pid      
  • Windows

啟動uwsgi:

cd 項目檔案夾
uwsgi --ini 項目檔案夾/uwsgi.ini      

停止uwsgi:

cd 項目檔案夾
uwsgi --stop uwsgi.pid      
  • 注意事項

當uwsgi 啟動後,目前django項目的程式就會變成背景守護程序,關閉目前終端時,此程序也不會停止。

nginx 反射代理配置

nginx是輕量級的高性能Web伺服器,提供了諸如HTTP代理和反向代理、負載均衡、緩存等一系列重要特性,在實踐之中使用廣泛,它是使用C語言編寫,執行效率高

  • nginx作用
  • 負載均衡, 多台伺服器輪流處理請求
  • 反射代理
  • 反射代理圖示(nginx伺服器可以通過區分路由類型,把路由指向不同的伺服器進行處理)
Django(part52)--項目部署
nginx安裝
  • Linux
sudo apt install nginx      
  • windows

安裝配置教程:​​Nginx Windows詳細安裝部署教程​​

nginx配置(Linux)

現在,我們要修改nginx 的配置檔案/etc/nginx/sites-available/default

打開配置檔案:

sudo vim /etc/nginx/sites-available/default      

修改配置檔案:

#在server節點下添加新的location項,指向uwsgi的ip與端口
server {
    ...
    location / {
        uwsgi_pass 127.0.0.1:8000;  
        # 将/路由,映射到uwsgi的127.0.0.1:8000
        include /etc/nginx/uwsgi_params; 
        #将所有的參數轉到uwsgi下
    }
    ...
}      

每次修改完該檔案後,我們都需要重新開機nginx

重新開機nginx:

sudo /etc/init.d/nginx restart      
修改uWSGI配置

修改​

​項目檔案夾/uwsgi.ini​

​下的http通信方式改為socket通信方式:

[uwsgi]
# 去掉如下
# http=127.0.0.1:8000
# 改為
socket=127.0.0.1:8000      
重新開機uWSGI服務(Linux)
sudo uwsgi --stop uwsgi.pid
sudo uwsgi --ini 項目檔案夾/uwsgi.ini      
nginx的操作(Linux)
  • 啟動 nginx
  • ​sudo /etc/init.d/nginx start​

  • ​sudo service nginx restart​

  • 檢視nginx程序
  • ​ps aux | grep nginx​

  • ​sudo /etc/init.d/nginx status​

  • ​sudo service nginx status​

  • 停止nginx
  • ​sudo /etc/init.d/nginx stop​

  • ​sudo service nginx stop​

  • 重新開機nginx
  • ​sudo /etc/init.d/nginx restart​

  • ​sudo service nginx restart​

nginx 配置靜态檔案路徑(Linux)

對于settings.py中靜态檔案的路徑STATICFILES_DIRS,隻在調試階段有效,在網站運作模式(DEBUF=False)下無效,這時,我們需要再次進行配置。

# file : /etc/nginx/sites-available/default

server {
    ...
    location /static {
        root 項目檔案夾的絕對路徑;
        # 将/static路由, 映射到本地主機的項目檔案夾下(絕對路徑)
    }
    ...
}