2011-02-03 71 views

回答

6

Django文檔中列出的Apache/mod_wsgi的,阿帕奇/ mod_python的和FastCGI等

mod_python的現在已經過時,應該改爲使用mod_wsgi的。

的Django與mod_wsgi的易於安裝,但: :

  • 你只能在一個時間[你甚至可以只使用Python版本的mod_wsgi被編譯爲編輯]用一個Python版本
  • [編輯:看來,如果我錯了mod_wsgi的不支持的virtualenv:它確實]

所以對多個網站(針對不同的Django/Python版本)上的服務器的mod_wsgi不是 百世t解決方案。

的FastCGI可以用virtualenv中使用,也有不同的Python版本,你

 
./manage.py runfcgi … 

運行它,然後配置你的網絡服務器使用這個FCGI接口。

關於Django部署的新東西似乎是gunicorn。它是一個實現wsgi的web服務器,通常用作「代理」的「大」web服務器的後端。

使用部署gunicorn感覺很像fcgi:你運行一個進程,使用manage.py來管理django處理的東西,並將一個web服務器作爲前端向全世界運行。

但gunicorn部署有超過fcgi的一些優勢:

  • 速度 - 我沒有找到來源,但基準說FCGI是不一樣快的F建議
  • 配置文件,您FCGI執行manage.py命令時必須在命令行上執行所有配置。當通過一個init.d運行多個django實例(類似於unix的操作系統的系統服務啓動)時,這是不方便的。它總是相同的cmdline,只有不同的配置文件
  • gunicorn可以放棄特權:沒有必要在你的init.d腳本來做到這一點,可以很容易地切換到每Django的情況下一個用戶
  • gunicorn表現得更像守護進程:寫入pidfile和日誌文件,分叉到後臺等,使得它更容易在init.d腳本中使用。

因此,我建議使用gunicorn解決方案,除非您在單個服務器上使用低流量的單個站點,而不是使用wsgi解決方案。但我認爲從長遠來看,你對槍炮更加滿意。

如果你只有一個django網絡服務器,我會建議使用nginx作爲frontendproxy,因爲它是最好的表現(同樣這是基於我在某些博客文章中閱讀的基準測試 - 不再有url)。 我個人使用apache作爲frontendproxy,因爲我需要它爲服務器上託管的其他網站。

Django的部署進行簡單的設置指令可以在這裏找到: http://ericholscher.com/blog/2010/aug/16/lessons-learned-dash-easy-django-deployment/

我對gunicorn的init.d腳本位於github上: https://gist.github.com/753053

不幸的是我並沒有在博客,但經驗豐富的系統管理員應該能夠完成所需的設置。

+0

我遠離經驗豐富的系統管理員,但非常感謝您總結各種部署方法。 – Sushi 2011-02-03 12:35:43

1

我自己在部署Django項目和自動部署過程中遇到了很多問題。 Apache和mod_wsgi就像Django Deployment的詛咒一樣。有幾種工具,如Nginx,Gunicorn,SupervisorD和正在趨向於Django部署的Fabric。起初,我單獨使用/配置它們,而沒有部署自動化,這花費了很多時間(我必須爲客戶維護測試以及生產服務器,並且必須在新功能經過測試和批准後立即更新它們)。但是,我偶然發現了django-fagungis,它將我的項目從bitbucket克隆到我的遠程服務器(它使用Nginx,Gunicorn,SupervisorD,Fabtic和virtualenv,並且還安裝所有依賴項),完全自動化了Django Deployment,只有三個命令:)你可以在我的博客文章here中找到更多關於它的信息。現在我甚至不必參與這個過程(過去需要花費很多時間),我的一個初級開發人員在他的本地機器上運行django-fagungis mentioned here這三個命令,我們得到一個清晰的新副本我們的項目部署在幾分鐘內沒有任何麻煩:)