linux上uwsgi+nginx+django發布項目


在發布項目前首先將部署環境進行搭建,尤其是依賴包一定需要提前安裝。

一、虛擬環境的搭建

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

按照以上完成服務啟動以及項目訪問

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM