在發布項目前首先將部署環境進行搭建,尤其是依賴包一定需要提前安裝。
一、虛擬環境的搭建
1、建議在linux下新建一個虛擬環境,這樣有獨立干凈的環境。
mkvirtualenv -p python3 yw_crm_project
2、確認軟件包管理工具以及python來自於虛擬環境
which pip3
which python3
3、安裝項目所需要的包,將windows中所需要的包導出,並且在虛擬環境中安裝
pip3 install -r requirements.txt
4、基礎環境所需要的包
部署這個項目的環境可能需要用到的包
yum groupinstall "Development tools" yum install zlib-devel bzip2-devel pcre-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel
二、nginx的安裝與啟動
1、nginx依賴包的安裝
yum install gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel
db4-devel libpcap-devel xz-devel openssl openssl-devel -y
2、nginx安裝與啟動
(1)下載源碼包
wget -c https://nginx.org/download/nginx-1.12.0.tar.gz
(2)解壓
tar -zxvf nginx-1.12.0.tar.gz -C /usr/local/
(3)配置
./configure --prefix=/root/Envs/yw_crm_project/ --with-http_ssl_module --with-http_stub_status_module
(4)編譯、安裝
make && make install
(5)啟動nginx
進入到nginx的安裝目錄,進入到sbin目錄,運行nginx文件
./nginx #啟動 ./nginx -s stop #關閉 ./nginx -s reload #重新加載
三、uwsgi的安裝與啟動
1、安裝
pip3 install uwsgi
2、啟動
注意進入到項目下執行此命令,與manage.py同一級
uwsgi --http :8000 --module yw_crm.wsgi --py-autoreload=1 #紅色參數表示修改源碼后無需后台重新啟動
此時已經完成nginx、uwsgi的安裝與啟動,下一步就是上傳項目文件。
四、項目的上傳與配置
1、上傳項目
在本地將項目文件進行壓縮,然后通過ZMODEM上傳到linux服務器上,然后進行解壓,此時項目位於虛擬環境中。
2、修改配置文件
如果訪問這個項目在setting中修改
ALLOWED_HOSTS =[]
將其修改為
ALLOWED_HOSTS = ['*']
五、項目的訪問
此時啟動uwsgi訪問django的8000端口是可以訪問的,注意,此時並沒有啟動nginx。
可以看到,這樣存在兩個問題:
(1)難道每次訪問都要輸入8000端口嗎?這樣也太麻煩了吧!
(2)頁面樣式丟失
這是nginx就有作用了,它會幫你解決這兩件事情。
1、端口轉發
修改nginx的配置文件,nginx配置文件位於
nginx/conf/nginx.conf
此時首先將windows下的host文件寫入域名和ip的對應
文件位於:
C:\Windows\System32\drivers\etc\hosts
其次,可以看到請求先經過nginx的80端口,nginx將請求轉發給django的8000端口,這樣無須每次訪問寫django的訪問地址和端口,配置完畢后重啟nginx。但是此時如果不出意外會報錯,因為端口轉發后,uwsgi的啟動需要更改參數,只需要將啟動命令改為:
uwsgi --socket :8000 --module yw_crm.wsgi --py-autoreload=1 #傳輸協議的更改
這樣啟動后就沒問題,訪問:
訪問nginx中設定的域名,直接跳轉到django項目的8000端口的地址,這樣就完成了端口轉發。
2、靜態資源收集
可以看到樣式依舊不在,此時收集靜態資源,uwsgi不會幫你收集靜態資源的,只能依靠nginx,在nginx的配置文件中進行配置。
(1)修改nginx配置文件
注意:alias參數必須寫在location中
server {
... listen 80; #server_name localhost; server_name www.yw.com; #charset koi8-r; #access_log logs/host.access.log main; location / { include /root/Envs/yw_crm_project/nginx/conf/uwsgi_params; uwsgi_pass 0.0.0.0:8000; # root html; # index index.html index.htm; } location /static { alias /root/Envs/yw_crm_project/nginx/static/; }
...
}
(2)新建目錄
根據配置文件中設置的目錄進行新建
mkdir /root/Envs/yw_crm_project/nginx/static
(3)修改項目中的settings文件
將設置的路徑添加到settings文件中
STATIC_ROOT='/root/Envs/yw_crm_project/nginx/static'
(4)收集靜態資源
在項目中,與manage.py同級下,執行以下命令
python3 manage.py collectstatic
此時開始收集靜態資源
最后重啟nginx並且進行訪問
注意:
這里可能會出現問題,請求的靜態資源錯誤代碼403,此時不要着急,這是由於訪問權限的問題,在nginx的配置文件中將第一行的
#user nobody
改為
user root
此時就沒什么問題了,如果還不行可以試試更改權限,將靜態資源文件的權限更改最大
chmod 777 static
這樣就完成部署了,但是細心的人可能發現驗證碼為什么沒有出現,這是因為驗證碼利用到了session,這與數據庫有關,那么就牽扯到了數據庫的遷移了,詳情參考:https://www.cnblogs.com/shenjianping/p/10984540.html
總結:
1、啟動nginx
cd nginx/sbin
./nginx
2、啟動uwsgi
進入到項目目錄下
uwsgi --socket :8000 --module yw_crm.wsgi --py-autoreload=1
3、訪問
www.yw.com
按照以上完成服務啟動以及項目訪問