简短版:您如何部署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 部署方式。对我上面说的任何意见或澄清都将不胜感激。