學習筆記,僅供參考
文章目錄
- 項目部署
- 項目部署的幾個步驟
- 安裝同版本的資料庫(略)
- django項目遷移
- 安裝python
- 安裝相同版本的包
- 将目前項目源代碼複制到運程主機上(scp 指令)
- ssh遠端登入雲主機
- uWSGI 網關接口配置
- WSGI規範
- uWSGI網關接口配置
- 安裝uWSGI
- 配置uWSGI(這裡我用Windows示範)
- uWSGI的運作管理(Linux)
- nginx 反射代理配置
- nginx安裝
- nginx配置(Linux)
- 修改uWSGI配置
- 重新開機uWSGI服務(Linux)
- nginx的操作(Linux)
- nginx 配置靜态檔案路徑(Linux)
項目部署
我們在軟體開發完畢後,會把開發版的軟體安裝到伺服器上長期運作.
項目部署的幾個步驟
- 在伺服器上安裝和配置與開發階段同版本的資料庫;
- django項目遷移(在伺服器上配置與開發環境相同的python版本及依賴的包);
- 用
替代uwsgi
方法啟動伺服器;python manage.py runserver
- 配置
反射代理伺服器;nginx
- 用
配置靜态檔案路徑,解決靜态路徑問題。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),就看不到調試資訊了:

如果我們沒有對settings.py進行配置,也就是處于開發調試階段,那麼我們向http://127.0.0.1:8000/asdfg送出請求,我們是會看到如下頁面的:
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伺服器可以通過區分路由類型,把路由指向不同的伺服器進行處理)
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路由, 映射到本地主機的項目檔案夾下(絕對路徑)
}
...
}