django - 运行 (i) gunicorn 系统范围和 (ii) 每个 virtualenv 安装 gunicorn 的优缺点是什么(假设每个 512mb VM 有 5-6 个 virtualenvs)

标签 django virtualenv gunicorn

我在 Django 上运行 5-6 个网站。每个 django 项目都在自己的 virtualenv 中,并为一个网站提供服务。

我目前为每个 virtualenv 安装 gunicorn,因此每个 django 项目都有自己的 gunicorn 安装和进程。

这种方法的优缺点是什么,以及在整个系统范围内安装 gunicorn 的替代方案,其中一个 gunicorn 安装管理所有网站(如标准的 apache 设置)。

环境是在 linode 上运行 Ubuntu 11.04 的 512mb 虚拟机。当然,我使用nginx来代理对gunicorn的请求。

最佳答案

在我们的一堆服务器上,我们有多达 10 个不同的 django 应用程序,它们都在自己的 virtualenv 中运行自己的 gunicorn。

我们在整个系统范围内使用一个主管进程来控制它们。

我们还有一个 nginx 进程来处理所有应用程序的所有流量(反向代理、提供静态媒体等)。

我们决定使用这种方法,因为它似乎是最明智和最容易自行设置和控制每个应用程序的方法。使用 supervisor 自己启动/停止/重新加载每个应用程序,让我们对我们想要做的事情进行更精细的控制。它还使添加更多应用程序变得非常容易,而不会影响机器上已有的应用程序。

它还允许我们以不同的用户身份运行每个应用程序,以便我们更好地控制这些进程在做什么,以及他们有权访问什么,如果您需要担心安全性,这很好。如果这些都是您办公 table 下自己服务器上的所有应用程序,那么这对您来说可能不是问题。

如果您为所有内容运行一个版本的 gunicorn,并且该 gunicorn 进程发生任何事情,那么它将影响您的所有应用程序,这并不理想。它还限制了你可以做什么,如果你想在一个应用程序上运行 eventlet,在另一个应用程序上运行 gevent 并在另一个应用程序上同步,如果它们都单独运行会更容易。此外,某些应用程序可能需要比其他应用程序更多的进程,如果它们是分开的,配置起来会更容易。

如果您使用 apache 方法,它可能会减少您的整体资源占用,因为您不必为每个应用程序运行相同进程的多个版本。如果您的资源有限,这对您来说可能更重要,但现在内存和 CPU 非常便宜,这不是问题。

这很大程度上取决于每个应用程序将获得多少流量。如果您根本没有获得任何流量,那么请执行对您来说最容易设置和维护的操作。如果您获得大量流量,或计划获得大量流量,那么您现在设置的任何内容,一旦超出当前设置,可能不得不再次更改。

关于django - 运行 (i) gunicorn 系统范围和 (ii) 每个 virtualenv 安装 gunicorn 的优缺点是什么(假设每个 512mb VM 有 5-6 个 virtualenvs),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8678766/

相关文章:

django - 将具有 OneToOne 关系的两个模型合并为一种形式 - Django

python - 我可以在 1 个域上使用 2 个不同版本的 Python 拥有 2 个 Django 站点吗?

python - 仅使用虚拟环境文件夹运行 python 脚本

python - 如何在 Ubuntu 上更新 virtualenv?

django - 如何使用带有 gunicorn 的 Django 日志记录

python - Gunicorn ModuleNotFound 错误,之前工作正常

django - Mod_wsgi https 错误连接被拒绝

python - 破解 Django 管理员,用于登录/注销的 Hook

django - 使用 Django、Nginx、Gunicorn 和 supervisor 进行空日志记录

mysql - 对历史上未被认可的 django 进行唯一的约束