推荐的Django部署方式

9

简短版:您如何部署Django服务器?您运行什么应用程序服务器、前端(如果有的话,前端指反向代理),以及操作系统?任何意见都将不胜感激,我在Python方面是个新手,更不用说作为服务器管理员了。

详细版: 我正在迁移到新的服务器主机,虽然这给周末带来了不少麻烦……但也并非全是坏事。我有机会尝试一种可能更好的Django“部署”方式。

目前,我正在使用Tornado的WSGI接口,通过Debian Lenny上的nginx前端使用Django。我正在考虑迁移到Rackspace Cloud,因此在选择操作系统时我有不少选择:

  • Debian 5.0 (Lenny)
  • FC 11或12
  • Ubuntu 9.10或8.04(LTS)
  • CentOS 5.4
  • Gentoo 10.1
  • Arch Linux 2009.02

我总结得到的是:

Linux发行版

Debian和CentOS很慢更新软件的非bugfix版本,因为它们主要关注稳定性。这是好事还是坏事?我可以看到稳定性是一件好事,但无法轻松获取Python 2.6(而不必用Python 2.4替换)有些令人失望,如果这样做,那么当我希望使用apt/yum安装Python库时就会陷入困境(它将尝试重新安装Python 2.4)。

Ubuntu和Fedora似乎准备就绪。几乎已经“手到擒来”,好像一切都做好了。我喜欢调整东西的方式,我更喜欢知道安装了什么以及如何配置,而不是使用“模板”设置(无意冒犯,这只是最好的描述我试图说的方式)。我一直在玩Fedora,我很惊讶地发现,pycurl、simplejson和一堆其他库已经安装好了;这引发了另一个问题:还安装了什么?我在一个非常小的VPS上运行一个紧凑的系统,我更喜欢只运行我需要的东西。

接下来是 Gentoo… 我成功地在我的台式机上安装了 Gentoo(花了将近一周的时间),但在许多情况下,我想要做某事并不得不花费 45 分钟重新编译软件以使用新的 USE flags 来解析 PNG 的 PIL 图像,最终放弃了它。不过我一直在想,Gentoo 对于像服务器这样的“静态”东西有用吗?我知道自己将在服务器上做什么,所以 USE flags 几乎不会改变。它可以优化编译以适应你告诉它的需求,而不会多余——这是我在运行最小 RAM 和 HDD 空间时能欣赏到的东西。不过,我听说当你尝试更新软件时,Gentoo 很容易崩溃… 这比其他任何事情都让我远离它。

我对 Arch Linux 一无所知。对这个发行版的任何意见都将不胜感激。

Web 服务器

我一直在使用 Tornado,可以肯定地说,它是运行起来最麻烦的。我不得不编写自己的脚本来预分叉它,因为在我设置这个服务器的时候,我可能只占 Tornado 用户群的 10% 左右(不包括 FriendFeed)。然后我必须设置另一个“看门狗”程序来确保这些分叉不会行为异常。好的一面是,它只使用大约 40MB 的 RAM 来运行我所有 7 个 Django 网站;我很喜欢这个,非常喜欢。

我一直在使用 nginx 作为 Tornado 的前端,我可以在 Django FastCGI worker 前面直接运行 nginx,但当你提高并发级别时,它们没有 Tornado 那么可靠。对我来说,这并不是一个选项,但我想我还是列出来了。

还有 Apache,Django 建议你通过 mod_wsgi 使用它。我个人不太喜欢 Apache,我知道它非常、非常、非常成熟,但与 nginx 和 lighttpd 相比,它似乎太…臃肿了。Apache/mod_python 甚至都不是一个选项,因为我的 RAM 很有限。

Segue 到 Lighttpd!这里没有什么可说的,我从未使用过。我听说你可以在 Apache/mod_wsgi 前面运行它或在 Django FastCGI worker 前面运行它。我听说它有轻微的内存泄漏问题,但我相信可以通过 cron 作业来解决。

我想要的是你所看到的最适合你需求的 Django 部署方式。对我上面说的任何意见或澄清都将不胜感激。


1
我认为Debian Lenny应该有Python 2.5,而不是2.4。 - Ben James
“best”?你指的是最便宜的吗?你指的是我自己的IT人员提供最好的支持吗?你指的是最丰富多彩的管理工具吗?你所说的“best”是指什么? - S.Lott
重复:http://stackoverflow.com/questions/475386/apache-vs-nginx-vs-lighttpd-which-is-simpler-to-configure-and-administer - S.Lott
重复:http://stackoverflow.com/questions/2192685/recommended-django-setup - S.Lott
@Ben James:是的,很抱歉,我说错了。@S.Lott:根据您的经验,我正在寻找最好的整体解决方案,您发现在安装(安装/配置Web服务器和分发)和维护(更新代码库、设置其他虚拟主机、设置分阶段服务器等)过程中最令人愉悦的是什么。 - Zack
4个回答

4
  1. 更新你的问题以排除那些行不通的选择。如果它拥有Python 2.4,并且安装是一个大麻烦,就将其从列表中删除,并更新问题以列出真正的候选项。只列出实际符合你要求的内容。(你没有说你的要求是什么,但似乎最小化升级很重要)。

  2. 抛硬币。

当在两个符合你要求的平台之间进行选择(你还没有指定),掷硬币是选择的最佳方式。

如果你不确定某些东西是否符合你的要求,通常最好列举出你所重视的方面。到目前为止,在问题中你似乎只重视 "无需安装"这一点。除此之外,我只能猜测你实际上有哪些要求。

一旦你确定了你正在寻找的功能集,随意掷硬币。

请注意,Linux发行版都有更多或更少相同的开源代码库。在它们之间进行选择是针对现有Linux代码库的打包,支持和预先集成的元素的选择的偏好。只需掷硬币。

在Web前端之间进行选择完全是一个关于需要哪些功能的问题。找到所有符合你要求的Web前端,然后抛硬币选择其中之一。

这些都不是 "锁定" 决策。如果你不喜欢最初选择的Linux发行版,你可以简单地选择另一个。它们都有相同的基本应用程序套件和相同的API。选择仅仅是一种偏好。

不喜欢你选择的Web服务器?在 mod_wsgi 管道的末尾,他们对你的Django应用程序来说都是相同的 (加上或减去一些配置更改)。不喜欢lighttpd? 切换到nginx或Apache--你的Django应用程序没有变化。因此,没有锁定,也没有选择次优的负面后果。

当没有下降风险时,只需掷硬币。


我正在寻找一款轻量级的Web服务器,可以支持上游服务器和虚拟主机。Nginx非常适合这个需求;我也要尝试一下Lighttpd;而我在使用Apache时只有与mod_python有关的不好经历。 - Zack

3
在我租用的服务器上,他们已经将Ubuntu镜像缩减到了最少。可能是因为他们必须制作一个特殊的镜像,才能正确安装驱动程序等内容,但我不确定。 他们甚至删除了wget和nano。所以你可以获得所有apt-get的好处,而不会有太多“模板式”的操作系统。

我只是想说,我认为这几乎是所有地方都这样做的方式,因此在尝试正常的Ubuntu-server安装时,您将无法获得正确的信息以做出决策。

除此之外,我同意其他人的看法,这并不是很具有约束力,所以你可以随便尝试一些东西。

在Web服务器方面,如果您还没有这样做,我建议您查看Cherokee。 它可能不适合您,但尝试一下也无妨。 我喜欢Ubuntu和Cherokee的简单设置。虽然我喜欢玩弄很多东西,但对于我的业务,我更喜欢这些。我有其他事情要做,而不是管理服务器,因此任何可以帮助我更快地完成任务的解决方案都是好的。如果这些项目大多是为了好玩,那么这可能不适用,因为您不会从这些易于设置、带有漂亮GUI和非常有用的向导中获得太多经验。


我还没有尝试过Cherokee,但我会试一试看它的表现如何。我可以处理任何数量的配置,这对我来说很容易,但是决定该用什么却让我感到困难。谢谢你的建议 :) - Zack

3
如果你想要一个比Tornado更轻量级的替代品,我建议使用spawning。它非常擅长代码重载,并且似乎具有很好的性能 - 当然最好自己尝试一下。
无论操作系统如何,我也建议使用supervisord来保持Tornado或spawning实例以及任何其他必要服务的运行。
然而,十次中有九次是数据库成为瓶颈,选择Web服务器并不会真正影响站点性能和可扩展性。

我通常将整个数据库存储在RAM缓存中。由于我的大多数网站具有相对较小的数据库,每天或每小时更新一次,在save()上使缓存失效并重新加载并不太难实现。我使用SupervisorD来保持所有Tornado分支运行,它运行得非常好,并且配置简单。我将要看看Spawning,因为它可能更适合我,因为我很少使用Tornado作为WSGI服务器。 - Zack
我可能会看看Fedora。我喜欢yum软件包管理器(只是个人偏好),我发现它有很多我想要的软件包(最新的nginx、python、tornado、supervisor、memcached、pycurl、simplejson...有一个很长的列表)。也许能够从软件包管理器安装-所有东西-将使我的生活变得更加轻松。我肯定会尝试一下Spawning,虽然我刚刚稍微了解了一下它,但它看起来很有趣...不太确定我是否喜欢代码重新加载。不过我会听天由命的。 - Zack

0

个人而言,我发现在服务器相关任务方面,BSD系统中的一种远远优于Linux发行版。给OpenBSD或者FreeBSD一个机会,一旦你这么做了,就再也不会回头了。


我愿意尝试,但是我的当前供应商不允许使用除我上面列出的操作系统之外的任何操作系统。 - Zack

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接