部署Django项目的不同方法及其优缺点?

时间:2011-02-03 03:41:54

标签: django deployment

在部署Django项目时,我是一个非常棒的人。我想知道部署Django项目的各种方法是什么,哪一个是最受欢迎的。

3 个答案:

答案 0 :(得分:6)

Django文档列出了Apache / mod_wsgi,Apache / mod_python和FastCGI等。

现在不推荐使用

mod_python ,应该使用mod_wsgi。

使用 mod_wsgi 的Django很容易设置,但是:

  • 你一次只能使用一个python版本[编辑:你甚至只能使用编译的mod_wsgi的python版本]
  • [编辑:好像我错了mod_wsgi不支持virtualenv:它确实如此]

因此,对于服务器上的多个站点(针对不同的django / python版本),mod_wsgi不是 最好的解决方案。

FastCGI 可以与virtualenv一起使用,也可以与不同的python版本一起使用

./manage.py runfcgi …

然后配置您的网络服务器以使用此fcgi界面。

关于django部署的新热点似乎是 gunicorn 。它是一个实现wsgi的网络服务器,通常用作后端,“大”网络服务器作为代理。

使用 gunicorn 进行部署与fcgi非常相似:运行一个使用manage.py执行django处理的进程,以及作为世界前端的Web服务器。

但是枪支部署比fcgi有一些优势:

  • 速度 - 我没有找到消息来源,但基准测试表明fcgi并不像f建议的那么快
  • 配置文件,对于fcgi,您必须在执行manage.py命令时在命令行上执行所有配置。当通过init.d(类似Unix的系统服务启动)运行多个django实例时,这是不方便的。它总是相同的cmdline,只有不同的配置文件
  • gunicorn可以删除权限:无需在init.d脚本中执行此操作,并且可以轻松切换到每个django实例的一个用户
  • gunicorn更像是一个守护进程:编写pidfile和logfile,分叉到后台等,再次在init.d脚本中再次使用它。

因此,我建议使用gunicorn解决方案,除非您在单个服务器上拥有一个流量较低的站点,而不是使用wsgi解决方案。但我认为从长远来看,你对枪炮更加满意。

如果你有一个只有django的网络服务器,我建议使用nginx作为frontendproxy,因为它是最好的表现(再次这是基于我在一些博文中读到的基准 - 没有网址了)。 我个人使用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

不幸的是我还没有博客,但经验丰富的系统管理员应该可以进行必要的设置。

答案 1 :(得分:4)

使用Nginx / Apache / mod-wsgi,你不会出错。

如果您更喜欢简单的替代方案,只需使用Apache。

有一个非常好的部署文档:http://lethain.com/entry/2009/feb/13/the-django-and-ubuntu-intrepid-almanac/

答案 2 :(得分:1)

我自己在部署Django Projects和自动化部署过程时遇到了很多问题。 Apache和mod_wsgi就像是Django Deployment的诅咒。有一些工具,如NginxGunicornSupervisorD和Fabric,这些工具都是Django部署的趋势。起初我单独使用/配置它们没有部署自动化,这花费了大量时间(我必须为我的客户端维护测试以及生产服务器,并且必须在测试和批准新功能后立即更新它们。)但是我偶然发现django-fagungis,它完全自动化我的Django部署,将我的项目从bitbucket克隆到我的远程服务器上部署(它使用Nginx,Gunicorn,SupervisorD,Fabtic和virtualenv,并且还可以安装所有依赖项),所有这些都是只有三个命令:)你可以在我的博客文章here中找到更多相关信息。现在我甚至不必参与这个过程(过去需要花费很多时间),我的一个初级开发人员在他的本地机器上运行django-fagungis mentioned here的这三个命令,我们得到了我们项目的清晰新副本在几分钟内完成,没有任何麻烦:)