在發佈項目前首先將部署環境進行搭建,尤爲是依賴包必定須要提早安裝。html
1、虛擬環境的搭建python
一、建議在linux下新建一個虛擬環境,這樣有獨立乾淨的環境。linux
mkvirtualenv -p python3 yw_crm_project
二、確認軟件包管理工具以及python來自於虛擬環境nginx
which pip3 which python3
三、安裝項目所須要的包,將windows中所須要的包導出,而且在虛擬環境中安裝sql
pip3 install -r requirements.txt
四、基礎環境所須要的包數據庫
部署這個項目的環境可能須要用到的包django
yum groupinstall "Development tools" yum install zlib-devel bzip2-devel pcre-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel
2、nginx的安裝與啓動windows
一、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
二、nginx安裝與啓動session
(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 #從新加載
3、uwsgi的安裝與啓動
一、安裝
pip3 install uwsgi
二、啓動
注意進入到項目下執行此命令,與manage.py同一級
uwsgi --http :8000 --module yw_crm.wsgi --py-autoreload=1 #紅色參數表示修改源碼後無需後臺從新啓動
此時已經完成nginx、uwsgi的安裝與啓動,下一步就是上傳項目文件。
4、項目的上傳與配置
一、上傳項目
在本地將項目文件進行壓縮,而後經過ZMODEM上傳到linux服務器上,而後進行解壓,此時項目位於虛擬環境中。
二、修改配置文件
若是訪問這個項目在setting中修改
ALLOWED_HOSTS =[]
將其修改成
ALLOWED_HOSTS = ['*']
5、項目的訪問
此時啓動uwsgi訪問django的8000端口是能夠訪問的,注意,此時並無啓動nginx。
能夠看到,這樣存在兩個問題:
(1)難道每次訪問都要輸入8000端口嗎?這樣也太麻煩了吧!
(2)頁面樣式丟失
這是nginx就有做用了,它會幫你解決這兩件事情。
一、端口轉發
修改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端口的地址,這樣就完成了端口轉發。
二、靜態資源收集
能夠看到樣式依舊不在,此時收集靜態資源,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
總結:
一、啓動nginx
cd nginx/sbin ./nginx
二、啓動uwsgi
進入到項目目錄下
uwsgi --socket :8000 --module yw_crm.wsgi --py-autoreload=1
三、訪問
www.yw.com
按照以上完成服務啓動以及項目訪問