47

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

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

我正在寻找的是:

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

我听说过 Apache、nginx 和 lighty 上的 mod_wsgi 和 mod_python。这些有哪些优点和缺点,我错过了某人吗?

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

@BrianLy:好的,我再看看 mod_wsgi。但是,如果我使用 lighty 提供静态文件,为什么还需要 Apache?我还设法轻松地为 django 应用程序本身提供服务。这到底是不是很糟糕?抱歉我这么笨:-)

更新:lighty 和 nginx 怎么样——当它们是完美的选择时,哪些是用例?

4

13 回答 13

27

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

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

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

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

  • 通过Apache服务 Django并且:

    • mod_python

      这是稳定且推荐/有据可查的方式。缺点:占用大量内存。

    • mod_wsgi

      据我了解, mod_wsgi 是一种较新的选择。它似乎在资源上更快,更容易。

    • mod_fastcgi

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

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

或者您可以:

  • 不使用 Apache而是使用另一个本机支持 FastCGI 的服务器来服务 Django :

    (文档提到如果您没有任何 Apache 特定需求,您可以这样做。我想原因一定是为了节省内存。)

    • 轻量级

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

    • nginx

    我已经看到声称该服务器比 lighttpd 更快的基准测试。不过,它主要是用俄语记录的。

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

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

于 2008-08-27T08:41:53.070 回答
9

我正在使用切诺基

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

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

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

当前的 Ubuntu 存储库版本非常旧,所以我建议你使用他们的 PPA。祝你好运。

于 2008-12-09T17:08:28.863 回答
6

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

快速查看您的要求:

  • 易于设置我发现 apache 2.2 相当容易构建和安装。
  • 快速轻松地使用资源我会说这取决于您的使用情况和流量。* 您可能不想使用 Apache 为所有文件提供服务,而使用LightTPD (lighty) 为静态文件提供服务。
  • 可以提供媒体文件吗?我假设您的意思是图像、闪存文件?阿帕奇可以做到这一点。
  • 同一服务器上的多个站点托管在 Apache 上的虚拟服务器。
  • 而不是安装其他扩展在 Apache 配置中注释掉任何你不想要的东西。
于 2008-08-25T14:00:27.687 回答
5

官方推荐的部署 django 项目的方法是使用 mod_python 和 apache。这在文档中有所描述。 这样做的主要优点是它是最好的文档、最受支持和最常见的部署方式。缺点是它可能不是最快的。

于 2008-08-25T13:49:24.970 回答
3

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

  1. 使用 nginx 服务请求(动态到应用程序,直接静态内容)。
  2. 使用 python web 服务器提供动态内容。

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

您需要查看 google 以找到 django 的当前最佳配置(仍在开发中)。

于 2008-09-20T18:06:27.277 回答
2

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

一个警告:nginx'mod_wsgi非常不喜欢命名的位置(它试图将它们传递进来SCRIPT_NAME),所以明显的 '<code>error_page 404 = @django' 会导致许多模糊的错误。我不得不修补 mod_wsgi 源来解决这个问题。

于 2008-09-24T11:58:12.697 回答
2

我也在努力理解所有选项。在这篇博文中,我发现了 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 更好的内存管理可能会对长时间运行的进程产生更大的反作用。

于 2008-10-06T07:56:56.303 回答
2

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

于 2009-06-15T02:09:56.043 回答
2

有很多方法可以做到这一点。因此,我建议仔细阅读 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 % Response-time-improvement-switching-uwsgi-nginx

问候

于 2010-10-28T04:05:17.643 回答
2

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

于 2011-05-09T21:01:42.780 回答
1

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

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

于 2008-08-25T15:06:06.783 回答
1

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

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

于 2008-09-04T13:53:33.380 回答
1

我有使用 Cherokee 的警告。当您对 Django Cherokee 进行更改时,它会维护旧进程,而不是杀死它并启动一个新进程。

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

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

它易于设置,更改后易于杀死或重置。

只需输入终端

sudo /etc/init.d/apache2 restart

并立即看到变化。

于 2013-02-12T23:55:47.600 回答