標籤:blog http io os ar 使用 for sp 檔案
五步教你實現使用Nginx+uWSGI+Django方法部署Django程式(上)By Django中國社區 at 2013-05-12 15:05
Django的部署可以有很多方式,採用nginx+uwsgi的方式是其中比較常見的一種方式。
在這種方式中,我們的通常做法是,將nginx作為伺服器最前端,它將接收WEB的所有請求,統一管理請求。nginx把所有靜態請求自己來處理(這是NGINX的強項)。然後,NGINX將所有非靜態請求通過uwsgi傳遞給Django,由Django來進行處理,從而完成一次WEB請求。
可見,uwsgi的作用就類似一個橋接器。起到橋樑的作用。
NOTE:不使用nginx,只使用uwsgi+django也是可以實現WEB服務的。uwsgi也可以直接處理WEB請求。
為了完成上述的方式部署,我將分成兩篇文章來分別進行闡述。
本文將分成五步來詳細闡述uwsgi+django的部署方式。nginx+uwsgi+django的部署將在下一篇 文章中闡述。
本文大綱:
- 環境介紹
- 安裝uwsgi
- 測試uwsgi
- 配置django
- 串連django和uwsgi,實現簡單的WEB伺服器。
環境介紹
- Ubuntu 12.04.1 LTS
- django 1.4.2
安裝uwsgi
1.安裝pip
可以參考這篇文章:http://www.jsxubar.info/install-pip.html
2.安裝uwsgi
$ export LDFLAGS="-Xlinker --no-as-needed"$ pip install uwsgi
測試uwsgi
在你的機器上寫一個test.py
# test.pydef 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
配置django
NOTE:
請保證你的django項目是正常使用的。可以使用
python manage.py runserver 0.0.0.0:8002
來測試一下你的django項目是否能正常跑起來。
請保證你的django程式已經關閉。
編寫django_wsgi.py檔案,將其放在與檔案manage.py同一個目錄下。
注意: 編寫檔案時需要注意語句os.environ.setdefault。比如,如果你的項目為mysite,則你的語句應該是 os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")
1 2 3 4 5 6 7 8 91011121314 |
#!/usr/bin/env python# coding: utf-8import osimport sys# 將系統的編碼設定為UTF8reload(sys)sys.setdefaultencoding(‘utf8‘)os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")from django.core.handlers.wsgi import WSGIHandlerapplication = WSGIHandler() |
串連django和uwsgi,實現簡單的WEB伺服器。
我們假設你的Django項目的地址是/home/work/src/sites/testdjango1/testdjango/mysite,
然後,就可以執行以下命令:
uwsgi --http :8000 --chdir /home/work/src/sites/testdjango1/testdjango/mysite --module django_wsgi
這樣,你就可以在瀏覽器中訪問你的Django程式了。所有的請求都是經過uwsgi傳遞給Django程式的。
最後:
關於如何將uwsgi與Nginx串連,可以期待下篇文章 《五步教你實現使用Nginx+Uwsgi+Django方法部署Django程式(下)》
最後面,請大家要支援Django中國社區哦,單靠一兩個人是不行的,一起推廣一下,讓Django社區更有力量哈!更有人氣哈!
推廣連結: http://django-china.cn/
參考、解釋及其它
wsgi: WSGI是一種Web伺服器網關介面。它是一個Web伺服器(如nginx)與應用伺服器(如uWSGI伺服器)通訊的一種規範。
關於WSGI協議看這裡:WSGI
uWSGI: http://uwsgi-docs.readthedocs.org/en/latest/index.html uWSGI是一個Web伺服器,它實現了WSGI協議、uwsgi、http等協議。 Nginx中HttpUwsgiModule的作用是與uWSGI伺服器進行交換。
uwsgi: uwsgi同WSGI一樣是一種通訊協定,而uWSGI是實現了uwsgi和WSGI兩種協議的Web伺服器。
uwsgi協議是一個uWSGI伺服器自有的協議,它用於定義傳輸資訊的類型(type of information),每一個uwsgi packet前4byte為傳輸資訊類型描述,它與WSGI相比是兩樣東西。
關於uwsgi協議看這裡:The uwsgi protocol
有了uWSGI為什麼還需要nginx?
nginx具備優秀的靜態內容處理能力,然後將動態內容轉寄給uWSGI伺服器,這樣可以達到很好的用戶端響應。
參考文獻:http://heipark.iteye.com/blog/1750970
END
Last edited by Django中國社區 (2013-05-12 23:35)
轉自:http://django-china.cn/topic/101/#top
【轉】五步教你實現使用Nginx+uWSGI+Django方法部署Django程式(上)