第一步先解決uwsgi與django的橋接。解決在沒有nginx的狀況下,如何使用uwsgi+DJANGO來實現一個簡單的WEB服務器。css
第二步解決uwsgi與Nginx的橋接。經過nginx與uwsgi的橋接,打通nginx與django的連通,從而比較完美的實現django的部署。html
本文將分紅五步來詳細闡述uwsgi+django的部署方式。nginx+uwsgi+django的部署將在下一篇 文章中闡述。node
本文大綱:python
安裝libxml*nginx
yum install libxml*
若是在安裝libxml前就安裝了uwsgi則 在安裝libxml後須要 從新編譯安裝shell
#或者使用python編譯 python uwsgiconfig.py --build #複製生成的可執行文件uwsgi到/usr/sbin/目錄下 cp uwsgi /usr/sbin/
不然直接安裝django
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
在你的機器上寫一個test.py服務器
# test.py def application(env, start_response): start_response('200 OK', [('Content-Type','text/html')]) return "Hello World"
而後執行shell命令:app
uwsgi --http :8001 --wsgi-file test.py
訪問網頁:
看在網頁上是否有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項目的地址是 /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