2011-02-03 74 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这三个命令,我们得到一个清晰的新副本我们的项目部署在几分钟内没有任何麻烦:)