linux上uwsgi+nginx+django發佈項目

在發佈項目前首先將部署環境進行搭建,尤爲是依賴包必定須要提早安裝。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

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

相關文章
相關標籤/搜索