Django最干净和最快的服务器设置[关闭]
Posted
技术标签:
【中文标题】Django最干净和最快的服务器设置[关闭]【英文标题】:Cleanest & Fastest server setup for Django [closed] 【发布时间】:2010-09-06 18:18:55 【问题描述】:我即将部署一个由 Django 提供支持的中型站点。我有一个专用的 Ubuntu 服务器。
我真的很困惑要使用哪个服务器软件。所以我心想:为什么不问问***。
我正在寻找的是:
易于设置 快速轻松地获取资源 可以提供媒体文件 能够在同一台服务器上为多个 djangosites 提供服务 我宁愿不安装 php 或其他任何消耗资源且我没有用的东西。我听说过 Apache、nginx 和 lighty 上的 mod_wsgi 和 mod_python。这些有哪些优点和缺点,我错过了某人吗?
@Barry:不知怎的,我觉得 Apache 对我来说太臃肿了。替代品呢?
@BrianLy:好的,我再看看 mod_wsgi。但是,如果我使用 lighty 提供静态文件,为什么还需要 Apache?我还设法轻松地为 django 应用程序本身提供服务。这到底是不是很糟糕?抱歉我这么笨:-)
更新:lighty 和 nginx 怎么样?当它们是完美的选择时,哪些是用例?
【问题讨论】:
【参考方案1】:因为我一直在寻找一些更深入的答案,所以我决定自己深入研究这个问题。如果我误解了什么,请告诉我。
一些一般建议是使用单独的网络服务器来处理媒体。分开,我的意思是一个没有运行 Django 的网络服务器。例如,此服务器可以是:
Lighttpd (Lighty) Nginx (EngineX) 或其他一些轻量级服务器然后,对于 Django,您可以走不同的道路。您可以:
通过 Apache 为 Django 提供服务,并且:
mod_python
这是稳定且推荐/有据可查的方式。缺点:占用大量内存。
mod_wsgi
据我了解,mod_wsgi 是一种较新的选择。它似乎在资源上更快更容易。
mod_fastcgi
使用 FastCGI 时,您将 Django 的服务委托给另一个进程。由于 mod_python 在每个请求中都包含一个 python 解释器,因此它使用了大量内存。这是绕过该问题的一种方法。还有一些安全问题。
你要做的是在一个单独的进程中启动你的 Django FastCGI 服务器,然后通过重写配置 apache 以在需要时调用这个进程。
或者你可以:
服务 Django 不使用 Apache,但使用另一个本机支持 FastCGI 的服务器:
(文档中提到如果您没有任何 Apache 特定需求,您可以这样做。我想原因一定是为了节省内存。)
Lighttpd这是运行 Youtube 的服务器。它似乎快速且易于使用,但是我看到了有关内存泄漏的报告。
nginx我已经看到声称该服务器比 lighttpd 更快的基准测试。不过,它主要是用俄语记录的。
另一件事,由于 Python 的限制,您的服务器应该在分叉模式下运行,而不是线程。
所以这是我目前的研究,但我想要更多的意见和经验。
【讨论】:
mod_python 模块不需要消耗更多内存。它的观点已经发展成为一种都市神话,而现实是人们遇到的内存问题是由 mod_python/Python 的安装方式和 Apache 的配置方式引起的。第一个问题是过去 Python 通常没有安装共享库。这意味着 mod_python 必须静态链接它,导致由于地址重定位而使用本地内存。另一个问题是人们使用 prefork,这对 PHP 更好,但对 Python 很糟糕。【参考方案2】:我正在使用Cherokee。
根据their benchmarks(他们的盐粒),它比 Lighttpd 和 nginx 更好地处理负载......但这不是我使用它的原因。
我使用它是因为如果您键入cherokee-admin
,它会启动一个新服务器,您可以登录(使用一次性密码)并通过一个精美的 webmin 配置整个服务器。这是一个杀手级功能。它已经为我节省了很多 时间。而且它为我的服务器节省了大量资源!
至于 django,我将它作为线程化 SCGI 进程运行。效果很好。切诺基也可以保持运行。再次,非常好的功能。
当前的 Ubuntu 存储库版本非常旧,所以我建议你使用 their PPA。祝你好运。
【讨论】:
【参考方案3】:正如@Barry 所说,文档使用mod_python。我没有使用 Ubuntu 作为服务器,但在 Solaris 上使用 mod_wsgi 有很好的体验。您可以在 mod_wsgi 网站上找到 mod_wsgi and Django 的文档。
快速查看您的要求:
易于设置我发现 apache 2.2 的构建和安装相当容易。 快速轻松地使用资源 我会说这取决于您的使用情况和流量。 * 您可能不想使用 Apache 来处理所有文件,而是使用 LightTPD (lighty) 来处理静态文件。 可以提供媒体文件 我假设您是指图像、Flash 文件? Apache 可以做到这一点。 同一服务器上的多个站点 Apache 上托管的虚拟服务器。 不要安装其他扩展程序 注释掉 Apache 配置中不需要的任何内容。【讨论】:
我有这样的设置 - 我使用 mod_wsgi 来服务大部分站点,但有 Alias 指令来强制 Apache 处理来自 /media 和 /admin_media 的静态文件的服务。鉴于我们谈论的是“中型网站”,可能没有太多需要搞乱“更简单”的替代方案。【参考方案4】:官方推荐的部署 django 项目的方法是使用 mod_python 和 apache。这在the documentation. 中有所描述,主要优点是它是最好的文档、最受支持和最常见的部署方式。缺点是它可能不是最快的。
【讨论】:
虽然,#django freenode 上的 Django 支持社区同意文档已经过时,官方推荐的方式是 mod_wsgi。 我无法在 apache 上运行它,我尝试了很多次,我没有发现支持很好,教程只显示了一个难题。看来你必须成为 apache 专家。我建议使用带有 eventlet 的 nginx/gunicorn 或使用套接字的 nginx/uwsgi。两者都运行良好且易于配置!【参考方案5】:我认为最好的配置并不为人所知。但这里是:
-
使用 nginx 处理请求(动态到应用,直接静态内容)。
使用 python 网络服务器提供动态内容。
基于 python 的 Web 服务器的两个最快速的解决方案是:
cogen fapws2您需要查看 google 以找到 django 的当前最佳配置(仍在开发中)。
【讨论】:
【参考方案6】:我正在使用 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 源来解决这个问题。
【讨论】:
【参考方案7】:我也在努力理解所有选项。在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 更好的内存管理可能会对长时间运行的进程产生更大的反作用。
【讨论】:
【参考方案8】:保持简单:Django recommends Apache and mod_wsgi (or mod_python)。如果提供媒体文件是您服务的重要组成部分,请考虑使用 Amazon S3 或 Rackspace CloudFiles。
【讨论】:
+1。推荐使用 Apache + mod_wsgi。但是缺少有关声明的链接。 配置 apache 并不比 nginx/lighttpd 简单。【参考方案9】:有很多方法,方法可以做到这一点。因此,我建议仔细阅读DjangoAdvent.com上与部署过程相关的文章: Eric Florenzano - 使用 FastCGI 部署 Django:http://djangoadvent.com/1.2/deploying-django-site-using-fastcgi/ 也读: Mike Malone - 扩展 Django Stochastictechnologies 博客:完美的 Django 设置 Mikkel Hoegh 博客:35% 响应时间改进切换-uwsgi-nginx
问候
【讨论】:
【参考方案10】:在我看来,最好/最快的堆栈是 varnish-nginx-uwsgi-django。 我正在成功使用它。
【讨论】:
【参考方案11】:如果您使用的是 lighthttpd,您还可以使用 FastCGI 为 Django 提供服务。我不确定速度与 mod_wsgi 相比如何,但如果内存服务正确,您将获得 mod_wsgi 获得的一些好处,而 mod_python 则不会获得这些好处。最主要的是您可以为每个应用程序提供自己的进程(这对于保持不同应用程序的内存分离以及利用多核计算机非常有帮助。
编辑:只是补充一下关于 nginix 的更新,如果内存再次正常服务,则 nginix 使用“greenlets”来处理并发。这意味着您可能需要更加小心,以确保一个应用不会占用服务器的所有时间。
【讨论】:
nginx是单线程服务器;但后端(HTTP、FastCGI 或其他)是独立的进程。【参考方案12】:我们在所有 Django 部署中都使用 nginx 和 FastCGI。这主要是因为我们通常在 Slicehost 上部署,并且不想将所有内存都捐赠给 Apache。我想这将是我们的“用例”。
至于关于文档主要是俄语的评论——我发现English wiki 上的大部分信息都非常有用和准确。该站点也有 Django 的示例配置,您可以从中调整自己的 nginx 配置。
【讨论】:
我曾经遇到过一个关于 nginx 的问题,英文文档中没有完全解释。我通过翻译器(谷歌)运行了一条俄语线路,问题就解决了。所以俄罗斯方面的文档更完整。 @stesch:有趣。需要详细说明吗?【参考方案13】:我收到关于使用 Cherokee 的警告。当您对 Django Cherokee 进行更改时,它会维护旧进程,而不是杀死它并启动一个新进程。
关于 Apache,我强烈推荐这篇文章。
http://www.djangofoo.com/17/django-mod_wsgi-deploy-exampl
它易于设置,更改后易于杀死或重置。
直接在终端输入
sudo /etc/init.d/apache2 restart
变化立即显现。
【讨论】:
以上是关于Django最干净和最快的服务器设置[关闭]的主要内容,如果未能解决你的问题,请参考以下文章