使用Nginx+uWSGI+Django方法部署Django程序


 

  • 第一步先解決uwsgi與django的橋接。解決在沒有nginx的情況下,如何使用uwsgi+DJANGO來實現一個簡單的WEB服務器。

  • 第二步解決uwsgi與Nginx的橋接。通過nginx與uwsgi的橋接,打通nginx與django的連通,從而比較完美的實現django的部署。

本文將分成五步來詳細闡述uwsgi+django的部署方式。nginx+uwsgi+django的部署將在下一篇 文章中闡述。

本文大綱:

  • 環境介紹
  • 安裝uwsgi
  • 測試uwsgi
  • 配置django
  • 連接django和uwsgi,實現簡單的WEB服務器。

 

安裝uwsgi(安裝uwsgi前 需安裝 XML支持 yum install libxml*)

安裝libxml*

yum install libxml*

 

如果在安裝libxml前就安裝了uwsgi則 在安裝libxml后需要 重新編譯安裝

#或者使用python編譯
python uwsgiconfig.py --build
 
#復制生成的可執行文件uwsgi到/usr/sbin/目錄下
cp uwsgi /usr/sbin/

否則直接安裝

cd uwsgi-2.0.14
python setup.py install
cp uwsgi /usr/bin


 在安裝uwsgi后 python的軟連接 有可能被設置回2.6上 需重新執行下軟連接設置

3、備份原有python命令執行文件

mv /usr/bin/python /usr/bin/pythonbak

4、創建新python軟連接

ln -s /usr/local/python3/bin/python3.5 /usr/bin/python

 

4.測試uwsgi

在你的機器上寫一個test.py

# test.py
def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return "Hello World"

然后執行shell命令:

uwsgi --http :8001 --wsgi-file test.py

訪問網頁:

http://127.0.0.1:8001/

看在網頁上是否有Hello World

 

 有些時候,把程序放在生產環境,不過出於一些原因還沒有配置nginx等環境,關閉了Debug,想看看網站,這時會出現靜態文件無法訪問,界面一塌糊塗的情況。使用如下命令即可成功使用靜態文件

python manage.py runserver 0.0.0.0:8000 --insecure

編寫wsgi.py文件,將其放在與文件manage.py同一個目錄下,如果程序本身已經有wsgi文件,把它放到和文件manage.py同一個文件夾

#!/usr/bin/env python
# coding: utf-8

import os
import sys

# 將系統的編碼設置為UTF8
reload(sys)
sys.setdefaultencoding('utf8')

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")

from django.core.handlers.wsgi import WSGIHandler
application = WSGIHandler()

 

 

連接django和uwsgi,實現簡單的WEB服務器。

我們假設你的Django項目的地址是 /usr/local/BBS_Pro,

然后,就可以執行以下命令:

uwsgi --http :8000 --chdir /usr/local/BBS_Pro --module wsgi

這樣,你就可以在瀏覽器中訪問你的Django程序了。所有的請求都是經過uwsgi傳遞給Django程序的



二.Nginx安裝

 

l  gzip模塊需要 zlib 庫

 

l  rewrite模塊需要 pcre 庫

 

l  ssl 功能需要openssl庫

 通過  yum 安裝,安裝下列插件 g++、gcc、openssl-devel、pcre-devel和zlib-devel

yum -y g++ install

安裝完上面插件后 安裝nginx

獲取nginx,在http://nginx.org/en/download.html上可以獲取當前最新的版本。

 解壓縮nginx-xx.tar.gz包。

  進入解壓縮目錄,執行./configure

  make & make install

安裝完成后 進入安裝目錄下 /nginx/sbin/  運行nginx服務

./nginx #啟動
./nginx -s reload 重新啟動

正常情況訪問 在瀏覽器中訪問localhost可以看見nginx的歡迎界面,說明安裝成功

配置nginx和uwsgi互通

2.在django項目文件夾manage.py目錄 添加uwsgi和nginx的互相通信xml文件djangochina_socket.xml

<uwsgi>
    <socket>127.0.0.1:8077</socket>
    <chdir>/usr/local/BBS_Pro</chdir>
    <module>wsgi</module>
    <processes>4</processes>
    <daemonize>uwsgi.log</daemonize>
</uwsgi>


3.進入nginx安裝目錄下 conf/nginx.conf文件編輯配置

server 節點添加下列內容  8077為 內部通信端口

        location / {
            include uwsgi_params;
            uwsgi_pass 127.0.0.1:8077;
        }

如果需要調整IP和端口設置server節點下列內容 80為 程序對外發布端口

    listen       80;
        server_name  loaclhost;

 設置完畢 重新載入 nginx

sudo service nginx reload

 

啟動Nginx相關模塊

配置好之后就可以開啟nginx服務器了。

可以在終端執行:

#service nginx start

注:可能會出現一下錯誤:

nginx: unrecognized service

解決方法:

下載nginx的啟動腳本:
# wget -O init-deb.sh http://library.linode.com/assets/660-init-deb.sh
將腳本添加到init.d目錄和生成可執行:
# sudo mv init-deb.sh /etc/init.d/nginx
# sudo chmod +x /etc/init.d/nginx
加的nginx到系統啟動:
# sudo /usr/sbin/update-rc.d -f nginx defaults(這邊可能不成功)

現在我們可以使用nginx的控制:

sudo service nginx stop 
sudo service nginx start 
sudo service nginx restart
sudo service nginx reload

 

啟動uWSGI服務器 加載django的xml設置

uwsgi -x /usr/local/BBS_Pro/djangochina_socket.xml

 

如果兩個都正常啟動 可以在 進程中看見 命令:ss -tunlp

tcp   LISTEN     0      100                                                           *:8077                                                         *:*      users:(("uwsgi",2762,3),("uwsgi",2764,3),("uwsgi",2765,3),("uwsgi",2766,3))
tcp   LISTEN     0      128                                                           *:80                                                           *:*      users:(("nginx",3189,6),("nginx",3190,6))

這個時候訪問localhost:80就可以正常顯示django項目頁面

 

如果正常訪問后出現頁面CSS 樣式和js文件丟失的情況如下解決

在django項目的settings.py文件中 添加 節點,設置css和js等靜態文件的路徑

STATIC_ROOT='/usr/local/BBS_Pro/static1/'

在nginx.conf中節點保證和上面設置一致

location /static/ {
            alias  /usr/local/BBS_Pro/static1/;
            index  index.html index.htm;
        }

調用命令執行django程序 靜態文件的 收集到當前設置的路徑

python manage.py collectstatic


重新啟動nginx 訪問正常!!

 

./nginx -s reload

 當服務器重新啟動后 只需要 依次開啟服務就可以訪問

1.開啟nginx

service nginx start

 2.運行DJANGO程序服務器 uwsgi

uwsgi --http :8000 --chdir /usr/local/BBS_Pro --module wsgi

 3.運行DJANGO程序 XML配置文件

uwsgi -x /usr/local/BBS_Pro/djangochina_socket.xml

 

 

 


免責聲明!

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



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