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

Sus*_*shi 7 deployment django

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

oxy*_*oxy 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 …

然后配置您的Web服务器以使用此fcgi接口.

关于django部署的新热点似乎是枪手.它是一个实现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

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


Lak*_*sad 4

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

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

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