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

时间:2020-03-05 18:42:48  来源:igfitidea点击:

我将部署一个由Django驱动的中型站点。我有专用的Ubuntu服务器。

我对使用哪种服务器软件感到非常困惑。所以我对自己想:为什么不问stackoverflow。

我正在寻找的是:

  • 易于设置
  • 快速便捷的资源
  • 可以提供媒体文件
  • 能够在同一台服务器上服务多个djangosites
  • 我宁愿不安装PHP或者其他任何会占用资源的东西,而我对此毫无用处。

我听说过Apache,nginx和lighty上的mod_wsgi和mod_python。这些利弊有哪些,我想念某人吗?

@Barry:不知何故,我觉得Apache对我来说是肿的。那替代品呢?

@BrianLy:好的,我会再检查一下mod_wsgi。但是,如果我提供lighty的静态文件,为什么还需要Apache?我也设法轻松地为Django应用提供服务。无论如何,那是不好的吗?对不起,蜜蜂如此愚蠢:-)

更新:当lighty和nginx是最佳选择时,它们是用例吗?

解决方案

回答

正式推荐的部署django项目的方法是将mod_python与apache一起使用。在文档中对此进行了描述。这样做的主要优点是,它是记录最好,支持最多,最常见的部署方式。缺点是它可能不是最快的。

回答

正如@Barry所说,该文档使用mod_python。我没有将Ubuntu用作服务器,但是在Solaris上使用mod_wsgi有很好的经验。我们可以在mod_wsgi站点上找到有关mod_wsgi和Django的文档。

快速查看要求:

  • 易于安装我发现apache 2.2相当容易构建和安装。
  • 快速便捷地使用资源我想说的是,这取决于使用情况和流量。 *我们可能不想使用Apache服务器所有文件,而不想使用LightTPD(lighty)服务器静态文件。
  • 我可以提供媒体文件(我假设我们是指图像,Flash文件)吗? Apache可以做到这一点。
  • 同一服务器上的多个站点托管在Apache上的虚拟服务器。
  • 而不是安装其他扩展注释掉Apache配置中不需要的任何内容。

回答

如果我们使用的是lighthttpd,则还可以使用FastCGI服务Django。我不确定速度与mod_wsgi相比如何,但是如果内存正常工作,我们将获得与mod_wsgi相比不会从mod_python获得的一些好处。主要的一点是我们可以为每个应用程序分配自己的进程(这对保持不同应用程序的内存分开以及利用多核计算机非常有帮助。

编辑:只是为了增加有关nginix的更新,如果内存再次正常工作,nginix将使用" greenlets"来处理并发。这意味着我们可能需要多加注意,以确保一个应用程序不会占用服务器的所有时间。

回答

由于我一直在寻找一些更深入的答案,因此我决定自己进行深入研究。如果我有误解,请告诉我。

一些一般性建议是使用单独的Web服务器来处理媒体。单独来说,我指的是未运行Django的网络服务器。该服务器可以是例如:

  • Lighttpd(浅色)
  • Nginx(EngineX)
  • 或者其他轻量级服务器

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

  • mod_wsgi据我了解,mod_wsgi是一个较新的替代方案。在资源上似乎更快,更容易。
  • mod_fastcgi使用FastCGI时,我们将Django的服务委托给另一个进程。由于mod_python在每个请求中都包含python解释器,因此它会占用大量内存。这是绕过该问题的一种方法。此外,还有一些安全问题。我们要做的是在单独的进程中启动Django FastCGI服务器,然后通过重写配置apache以在需要时调用此进程。

或者我们可以:

这是运行Youtube的服务器。它似乎快速且易于使用,但是我见过有关内存泄漏的报告。

  • Nginx的

我见过一些基准测试声称该服务器比lighttpd还要快。虽然它主要是用俄语记录的。

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

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

回答

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

至于有关文档主要使用俄语的说法-我发现英语Wiki上的大多数信息都是非常有用和准确的。这个站点也有针对Django的示例配置,我们可以从中调整自己的nginx配置。

回答

我认为最好的配置并不为人所知。但是这里是:

  • 使用nginx来处理请求(动态到应用程序,直接到静态内容)。
  • 使用python网络服务器提供动态内容。

基于python的Web服务器的两个最快速的解决方案是:

  • gen
  • fapws2

我们需要调查Google以找到django的当前最佳配置(仍在开发中)。

回答

我在mod_wsgi中使用nginx(来自Sid的0.6.32)。它工作得很好,尽管我不能说它是否比其他选择更好,因为我从未尝试过。 Nginx内置了memcached支持,它可能可以与Django缓存中间件进行互操作(我实际上并未使用它,而是使用python-memcache手动填充了缓存,并在进行更改时使它无效),因此缓存命中完全绕过了Django(我开发机器每秒可以处理约3000个请求)。

需要注意的是:nginx的mod_wsgi非常不喜欢命名的位置(它试图将它们传递到" SCRIPT_NAME"中),因此显而易见的" error_page 404 = @django"将导致许多晦涩的错误。我必须修补mod_wsgi源以修复该问题。

回答

我也在努力理解所有选项。在这篇博客文章中,我发现与mod_python相比,mod_wsgi有一些好处。

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

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

回答

我正在使用切诺基。

根据他们的基准(与它们成盐状),它比Lighttpd和nginx都能更好地处理负载...但这不是我使用它的原因。

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

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

当前的Ubuntu存储库版本很旧,因此我建议我们使用他们的PPA。祝你好运。

回答

保持简单:Django建议使用Apache和mod_wsgi(或者mod_python)。如果提供媒体文件是我们服务的很大一部分,请考虑使用Amazon S3或者Rackspace CloudFiles。

回答

有很多方法可以做到这一点,因此,我建议我们仔细阅读与DjangoAdvent.com上的部署过程相关的文章:
Eric Florenzano使用FastCGI部署Django:http://djangoadvent.com/1.2/deploying-django-site-using-fastcgi/
也阅读:
Mike Malone Scaling Django
Stochastictechnologies博客:完美的Django设置
Mikkel Hoegh博客:35%响应时间改进开关-uwsgi-nginx

问候