推荐的Django部署方式

9 投票
4 回答
3960 浏览
提问于 2025-04-15 19:14

简短版本: 你是怎么部署你的Django服务器的?用什么应用服务器,前端(如果有的话,前端指的是反向代理),还有你用的操作系统是什么?任何建议都非常感谢,我在Python方面还是个新手,作为服务器管理员更是如此。

详细版本: 我正在更换服务器主机,这个周末真是忙得不可开交……不过也不是全坏事。我有机会迁移到一个不同的,可能更好的Django“部署”环境。

目前我是在Debian Lenny上通过Tornado的WSGI接口使用Django,前面用的是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在发布非bug修复更新方面非常慢,因为它们主要关注稳定性。这是好事还是坏事呢?我觉得稳定性是好事,但我无法轻松获得Python 2.6,而要替换掉Python 2.4却让我很头疼,这让我有些失望。如果我真的替换了,那我在使用apt/yum安装Python库时就会遇到麻烦(它会试图重新安装Python 2.4)。

Ubuntu和Fedora看起来非常……随时可以使用。几乎是随时可以使用了,感觉一切都已经准备好了。我喜欢自己动手调整东西,更喜欢知道自己安装了什么,怎么配置,而不是直接用一个“现成”的设置(没有冒犯的意思,这只是我想表达的最佳方式)。我在玩Fedora时,惊喜地发现pycurl、simplejson和其他一些库已经安装好了;不过这让我产生了疑问,还有什么其他的东西已经安装了?我在一个非常小的VPS上运行,喜欢只运行我需要的东西。

然后是Gentoo……我在我的桌面上安装了Gentoo(差不多花了一周时间),但在经历了几次想做某件事却不得不花45分钟重新编译软件以使用新的USE标志来解析PNG时,我最终把它扔掉了。不过我在想,Gentoo适合用作“静态”的服务器吗?我知道我在服务器上要做什么,所以USE标志几乎不会改变。它会根据你告诉它的需求来优化编译,这一点我很欣赏,因为我需要节省内存和硬盘空间。不过我听说Gentoo在你尝试更新软件时容易出问题……这也是我目前不想用它的原因。

我对Arch Linux一无所知。如果有人对这个发行版有意见,我会很感激。

Web服务器

我一直在使用Tornado,可以说它是我运行起来最麻烦的一个。我不得不写自己的脚本来预先fork它,因为在我设置这个服务器时,我可能只占Tornado用户群的10%(不算FriendFeed)。然后我还得设置另一个“监视程序”来确保这些fork不会出问题。不过好的一点是,它运行我所有7个Django网站只需要大约40MB的内存;我很喜欢这一点。

我一直在用nginx作为Tornado的前端,我可以直接在Django FastCGI工作进程前面运行nginx,但在高并发时,FastCGI的可靠性不如Tornado。这对我来说并不是一个选项,但我觉得还是可以提一下。

还有Apache,Django推荐你通过mod_wsgi使用它。我个人不太喜欢Apache,我知道它非常成熟,但相比nginx和lighttpd,它看起来太“臃肿”了。Apache/mod_python对我来说也不是一个选项,因为我的内存非常有限。

说到Lighttpd!这里没什么好说的,我从来没有用过它。我听说你可以在Apache/mod_wsgi前面运行它,也可以在Django FastCGI工作进程前面运行它。我听说它有轻微的内存泄漏问题,不过我相信可以通过定时任务解决。

我想知道的是,你们认为最“合适”的Django部署是什么。任何建议或对我上面说的内容的澄清都非常欢迎。

4 个回答

3

我租的服务器地方,他们把Ubuntu的镜像精简到了最基本的部分。可能是因为他们需要制作一个特别的镜像,里面只包含合适的驱动程序等等,但我也不太清楚具体情况。他们甚至把wget和nano都去掉了。所以你能用到的apt-get功能还是挺多的,但整体的操作系统就没那么“标准化”了。

我提这个是因为我想,这种情况几乎在所有地方都是这样,所以如果你只是玩普通的Ubuntu服务器安装,可能得不到正确的信息来帮助你做决定。

除此之外,我同意其他人的看法,这并不算是一个很大的锁定,所以你可以随便尝试一下。

在网页服务器方面,我建议你看看cherokee,如果你还没试过的话。它可能不是你最喜欢的,但试试看也没坏处。我喜欢Ubuntu和Cherokee的简单设置。虽然我会玩很多东西来图个乐,但在工作上我更倾向于用这些。我还有其他事情要做,不想花太多时间管理服务器,所以任何能让我更快完成的解决方案都是好的。如果这些项目主要是为了娱乐,那这可能就不适用了,因为你不会从这些简单设置、界面友好、非常有帮助的向导中获得太多经验。

4
  1. 更新你的问题,去掉那些不适合的选项。如果你用的是Python 2.4,而且安装起来很麻烦,那就把它从列表中删掉,更新问题,只列出那些真正符合你需求的选项。只列出那些真的能满足你要求的。虽然你没有说明你的具体需求,但看起来最小的升级似乎很重要。

  2. 抛个硬币。

在选择两个都符合你需求的平台时(你还没说出你的需求),抛个硬币是最简单的选择方式。

如果你不确定某个选项是否符合你的需求,列出你看重的东西通常是个好主意。到目前为止,你的问题中似乎唯一看重的就是“没有安装”。除此之外,我只能猜测你到底有什么需求。

一旦你明确了你想要的功能,随便抛个硬币吧。

注意,所有的Linux发行版基本上都有相似的开源代码基础。选择它们之间的区别在于打包、支持和现有Linux代码基础中预集成元素的选择。随便抛个硬币。

在选择网页前端时,完全是看你需要什么功能。找出所有符合你需求的网页前端,然后抛个硬币来决定。

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

不喜欢你选择的网页服务器?在mod_wsgi的管道末端,它们对你的Django应用看起来都是一样的(加上或减去一些配置更改)。不喜欢lighttpd?可以换成nginx或Apache——你的Django应用不会改变。所以没有锁定,也没有因为选择不理想而带来的负面后果。

当没有风险时,随便抛个硬币吧。

3

如果你想找一个比Tornado更轻便的选择,我推荐spawning。这个工具在代码重新加载方面表现得很好,性能也不错——当然,最好还是自己试试看。

不管你用什么操作系统,我都建议使用supervisord,它可以帮助你保持Tornado或spawning实例的正常运行,还有其他一些重要的服务。

不过,通常情况下,问题往往出在数据库上,选择哪个网页服务器其实对网站的性能和扩展性影响不大。

撰写回答