推荐的Django部署

时间:2010-02-13 08:47:10

标签: python linux django deployment webserver

简短版:如何部署Django服务器?什么应用服务器,前端(如果有的话,前端我的意思是反向代理)和操作系统你运行它?任何输入都会非常感激,对于Python来说我是一个新手,甚至更多的是作为服务器管理员。

长版: 我正在服务器主机之间进行迁移,对于周末这么多......但这并不是一件坏事。我有机会转向Django的另一个可能更好的“部署”。

目前我正在使用Django通过Tornado的WSGI接口和Debian Lenny上的nginx前端。我正在寻求进入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和一堆其他库;然而,这提出了一个问题, else 是什么?我在一个非常小的VPS上运行紧凑的船,我更喜欢只运行我需要的东西。

然后是Gentoo ......我已经设法在我的桌面上安装了Gentoo(差不多花了一周时间)并且在我想要做一些事情并且不得不花费45分钟重新编译的很多事件之后最终把它丢掉了带有新USE标志的软件,所以我可以通过PIL解析PNG。我想知道,Gentoo是否适合像服务器一样的“静态”?我确切地知道我将在我的服务器上做什么,所以USE标志将永远改变。它优化了编译以满足您所告知的需求,仅此而已 - 我可以欣赏在最小的RAM和HDD空间上运行的东西。不过,我听说Gentoo在你尝试更新软件时会有破坏的倾向......现在最重要的是让我远离它。

我不知道关于Arch Linux的任何。对此发行版的任何意见将不胜感激。

Web服务器

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

我一直在使用nginx作为Tornado的前端,我可以在Django FastCGI工作者面前运行nginx,但是当你加速时,那些没有Tornado的可靠性并发级别。对我来说这不是一个真正的选择,但我想我也可以列出它。

还有Apache,Django建议你通过mod_wsgi使用它。我个人不太喜欢Apache,我知道它非常,非常,非常<非常成熟,什么不是,但与nginx和lighttpd相比,它看起来真的很胖...... Apache / mod_python甚至不是一个选项,因为我的RAM非常有限。

选择Lighttpd!这里不多说,我从来没有用过它。我听说你可以在Apache / mod_wsgi面前运行它,也可以在Django FastCGI工作者面前运行它。我听说它有轻微的内存泄漏问题,但我确信这可以通过cron工作解决。

我正在寻找的是您所看到的Django“最佳”部署以满足您的需求。我对上述内容的任何意见或澄清都将非常受欢迎。

4 个答案:

答案 0 :(得分:4)

  1. 更新您的问题以删除不起作用的选项。如果它有Python 2.4,并且安装很麻烦,只需将其从列表中删除,并更新问题以列出真正的候选者。仅列出实际符合您要求的那些。 (您没有说明您的要求 ,但最低限度的升级似乎很重要。)

  2. 抛硬币。

  3. 在两个满足您要求的平台(您尚未确定)之间进行选择时,抛硬币是最佳选择方式。

    如果您不确定某些内容是否符合您的要求,那么枚举您​​重视的内容通常会很好。到目前为止,您似乎唯一重视的问题是“没有安装”。除此之外,我只能猜测你实际拥有的要求。

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

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

    在网络前端中进行选择完全是您需要哪些功能的问题。找到符合您要求的所有网络前端,然后扔一枚硬币在其中进行选择。

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

    不喜欢您选择的网络服务器?在mod_wsgi管道的末尾,它们对于您的Django应用程序看起来都是一样的(加上或减去一些配置更改)。不喜欢lighttpd?切换到nginx或Apache - 您的Django应用程序不会更改。所以没有锁定,也没有做出次优选择的负面后果。

    如果没有下行风险,只需掷硬币。

答案 1 :(得分:3)

在我租用服务器的地方,他们已经将Ubuntu图像削减到最低限度。大概是因为他们不得不制作一个特殊的形象,只有正确的司机等等,但我不确切知道。 他们甚至删除了wget和nano。所以你得到了所有的apt-get goodness而不是很多“千篇一律”的操作系统。

只是这样说是因为我会想到这就是几乎所有地方都可以这样做的,因此使用正常的Ubuntu服务器安装无法为您提供正确的信息来做出决定。

除此之外,我同意其他人的观点,认为这不是一个锁定,所以你可以尝试一下。

在网络服务器端,我建议看看切诺基,如果还没有这样做的话。 它可能不是你的一杯乔,但尝试它没有任何伤害。 我更喜欢Ubuntu和Cherokee的简单设置。虽然我玩很多东西都很有趣,但我更喜欢这些用于我的业务。我还有其他事情要做,比管理服务器,所以任何可以帮助我更快地完成任务的解决方案都很好。如果这些项目主要是为了好玩,那么这很可能不会适用,因为你不会从这些简单的设置中获得很多经验 - 很好的gui-and-very-helpfull-wizards

答案 2 :(得分:3)

如果你想要一个Tornado的轻量级替代品,我建议spawning。它非常擅长代码重新加载并且似乎具有良好的性能 - 当然最好你自己尝试一下。

我还建议使用supervisord,无论操作系统如何,都要保持Tornado或产生实例以及任何其他基本服务。

然而,10次中有9次是数据库的瓶颈和选择的Web服务器实际上不会影响站点性能和可伸缩性。

答案 3 :(得分:0)

我个人认为其中一个BSD系统远远优于Linux发行版,用于服务器相关任务。给OpenBSD或FreeBSD一个机会。一旦你做了,你永远不会回去。