最干净的& Django最快的服务器设置

时间:2008-08-25 13:28:41

标签: python django apache hosting

我即将部署一个由Django提供支持的中型网站。我有一个专用的Ubuntu服务器。

我真的很困惑要使用哪些服务器软件。所以我心想:为什么不问stackoverflow。

我在寻找的是:

  • 易于设置
  • 资源快捷方便
  • 可以提供mediafiles
  • 能够在同一台服务器上提供多个djangosites
  • 我宁愿不安装PHP或任何其他糟糕的资源,而且我没有用。

我在Apache,nginx和lighty上听说过mod_wsgi和mod_python。哪些是这些的利弊,我错过了某人吗?

@Barry :不知怎的,我觉得Apache对我来说很臃肿。那些替代品呢?

@BrianLy :好的我会再看一下mod_wsgi。但是,如果我提供轻微的静态文件,为什么我需要Apache?我还设法用轻松的方式为django应用程序服务。反正这样糟糕吗?很抱歉这么愚蠢: - )

更新:lighty和nginx怎么样 - 当这些是最佳选择时,哪些是用例?

13 个答案:

答案 0 :(得分:26)

由于我正在寻找更深入的答案,我决定自己深入研究这个问题。如果我误解了什么,请告诉我。

一些一般建议是使用单独的网络服务器来处理媒体。通过单独,我的意思是一个没有运行Django的网络服务器。例如,该服务器可以是:

  • Lighttpd(Lighty)
  • Nginx(EngineX)
  • 或其他一些轻量级服务器

然后,对于Django,你可以走不同的道路。你可以:

  • 通过 Apache

    服务Django
    • <强> mod_python的

      这是稳定且推荐/记录良好的方式。缺点:使用大量内存。

    • <强> mod_wsgi的

      据我所知,mod_wsgi是一个新的选择。它似乎更快更容易获得资源。

    • <强>的mod_fastcgi

      使用FastCGI时,您将Django的服务委托给另一个进程。由于mod_python在每个请求中都包含一个python解释器,因此它使用了大量内存。这是绕过这个问题的一种方法。还存在一些安全问题。

      您所做的就是在一个单独的进程中启动Django FastCGI服务器,然后通过重写配置apache以在需要时调用此进程。

或者你可以:

  • 在不使用Apache 的情况下为Django 提供服务,但在本地支持另一台支持FastCGI的服务器:

    (文档中提到,如果您没有任何Apache特定需求,可以执行此操作。我想原因必须是节省内存。)

    • Lighttpd的

    这是运行Youtube的服务器。它似乎快速且易于使用,但我已经看到有关memoryleaks的报告。

    • nginx的

    我见过基准测试声称这台服务器比lighttpd更快。它主要用俄语记录。

另一件事,由于Python的限制,您的服务器应该以分叉模式运行,而不是线程化。

所以这是我目前的研究,但我想要更多的意见和经验。

答案 1 :(得分:9)

我正在使用Cherokee

根据their benchmarks(与它们的盐粒),它比Lighttpd和nginx更好地处理负载......但这不是我使用它的原因。

我使用它是因为如果你键入cherokee-admin,它会启动一个你可以登录的新服务器(使用一次性密码)并通过一个精美的webmin配置整个服务器。这是一个杀手级的功能。它已经为我节省了很多的时间。它为我的服务器节省了大量资源!

至于django,我将它作为线程SCGI进程运行。效果很好。切诺基也可以保持运转。再次,非常好的功能。

目前的Ubuntu repo版本已经很老了所以我建议你使用their PPA。祝你好运。

答案 2 :(得分:6)

正如@Barry所说,文档使用mod_python。我没有使用Ubuntu作为服务器,但在Solaris上使用mod_wsgi有很好的经验。您可以在mod_wsgi and Django网站上找到mod_wsgi的文档。

快速审核您的要求:

  • 易于设置我发现apache 2.2非常易于构建和安装。
  • 资源快速简便我想说这取决于您的使用情况和流量。 *您可能不希望使用Apache服务所有文件,并使用LightTPD(lighty)来服务器静态文件。
  • 可以投放媒体文件我认为你的意思是图片,flash文件? Apache可以做到这一点。
  • 同一服务器上的多个站点在Apache上托管虚拟服务器。
  • 而不是安装其他扩展程序在Apache配置中注释掉您不想要的任何内容。

答案 3 :(得分:5)

部署django项目的官方推荐方法是使用带有apache的mod_python。这在the documentation.中有所描述。主要的专业人员是,它是最好的文档,最受支持和最常见的部署方式。可以说它可能不是最快的。

答案 4 :(得分:2)

我认为最好的配置并不是那么出名。但这是:

  1. 使用nginx提供请求(动态到app,直接静态内容)。
  2. 使用python web服务器提供动态内容。
  3. 基于python的Web服务器的两个最快速的解决方案是:

    你需要调查谷歌以找到当前最好的django配置(仍处于开发阶段)。

答案 5 :(得分:2)

我正在使用 nginx (0.6.32 taken from Sid)和mod_wsgi。它运作得很好,但我不能说它是否比替代品更好,因为我从来没有尝试过。 Nginx内置了 memcached 支持,它可以与Django缓存中间件互操作(我实际上并没有使用它,而是使用python-memcache手动填充缓存并在进行更改时使其无效) ,因此缓存命中完全绕过Django(我的开发机器每秒可以提供大约3000个请求)。

警告:nginx'mod_wsgi非常不喜欢命名位置(它会尝试在SCRIPT_NAME中传递它们),因此显而易见的“error_page 404 = @django”会导致许多模糊的错误。我不得不修补mod_wsgi来修复它。

答案 6 :(得分:2)

我也很难理解所有选项。在this blog post中,我发现mod_wsgi与mod_python相比有一些好处。

小型VPS上的多个低流量站点使RAM消耗成为主要问题,而mod_python似乎是一个糟糕的选择。使用lighttpd和FastCGI,我设法将一个简单的Django站点的最小内存使用量降低到58MiB虚拟和6.5MiB驻留(在重新启动并提供单个非RAM大量请求之后)。

我注意到在Debian Etch上从Python 2.4升级到2.5会使Python进程的最小内存占用量增加几个百分点。另一方面,2.5更好的内存管理可能会对长时间运行的流程产生更大的相反影响。

答案 7 :(得分:2)

保持简单:Django recommends Apache and mod_wsgi (or mod_python)。如果提供媒体文件是您服务的重要组成部分,请考虑使用Amazon S3或Rackspace CloudFiles。

答案 8 :(得分:2)

在我看来,最好/最快的堆栈是varnish-nginx-uwsgi-django。 而且我成功地使用了它。

答案 9 :(得分:1)

如果你正在使用lighthttpd,你也可以使用FastCGI来提供Django服务。我不确定速度与mod_wsgi的比较,但是如果内存正确,你可以获得mod_wsgi带来的一些好处,而mod_python是你无法获得的。主要的一点是,您可以为每个应用程序提供自己的进程(这对于保持不同应用程序的内存分离以及利用多核计算机非常有用。

编辑:只是为了添加有关nginix的更新,如果内存再次正常运行,nginix使用“greenlets”来处理并发。这意味着您可能需要更加小心,以确保一个应用程序不会占用服务器的所有时间。

答案 10 :(得分:1)

我们在所有Django部署中使用nginx和FastCGI。这主要是因为我们通常在Slicehost上部署,并且不想将所有内存捐赠给Apache。我想这将是我们的“用例”。

关于文档大部分是俄语的评论 - 我发现English wiki上的大部分信息非常有用和准确。这个站点也有Django的示例配置,您可以从中调整自己的nginx配置。

答案 11 :(得分:1)

有很多方法可以做到这一点。出于这个原因,我建议仔细阅读与DjangoAdvent.com上的部署过程相关的文章: Eric Florenzano - 使用FastCGI部署Django:http://djangoadvent.com/1.2/deploying-django-site-using-fastcgi/ 读也是: 迈克马龙 - 缩放Django 随机技术博客:完美的Django设置 Mikkel Hoegh博客:35%响应时间改进 - 切换 - uwsgi-nginx

此致

答案 12 :(得分:1)

我有使用切诺基的警告。当您对Django进行更改时,Cherokee会维护OLD进程,而不是杀死它并开始新的进程。

在Apache上我强烈推荐这篇文章。

http://www.djangofoo.com/17/django-mod_wsgi-deploy-exampl

更改后易于设置,易于删除或重置。

只需输入终端

即可
sudo /etc/init.d/apache2 restart

立即看到变化。