Django 运行(i)gunicorn系统范围和(ii)每个virtualenv安装gunicorn(假设每个512mb虚拟机安装5-6个virtualenv)的优缺点是什么

Django 运行(i)gunicorn系统范围和(ii)每个virtualenv安装gunicorn(假设每个512mb虚拟机安装5-6个virtualenv)的优缺点是什么,django,virtualenv,gunicorn,Django,Virtualenv,Gunicorn,我在django上运行5-6个网站。每个django项目都有自己的virtualenv,并为单个网站提供服务 我目前按照virtualenv安装gunicorn,因此每个django项目都有自己的gunicorn安装和流程 这种方法的优缺点是什么,以及在系统范围内安装gunicorn的替代方案,一个gunicorn安装管理所有网站(如标准apache设置) 该环境是一个512mb虚拟机,在linode上运行Ubuntu11.04。当然,我使用nginx将请求代理给gunicorn。在我看来,您谈

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

我目前按照virtualenv安装gunicorn,因此每个django项目都有自己的gunicorn安装和流程

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


该环境是一个512mb虚拟机,在linode上运行Ubuntu11.04。当然,我使用nginx将请求代理给gunicorn。

在我看来,您谈论的是三个选项:

  • 为所有项目提供一个单一的Gunicorn流程
  • 一个Gunicorn安装,每个项目有单独的流程
  • 多个Gunicorn安装,每个virtualenv中一个
我不确定第一个是否可能,但所有的都似乎适合于其他两个选项中的一个,我认为它通常需要使用单个WSGI模块生成。此外,您还将失去在不干扰其他项目的情况下为单个项目终止或重新启动服务器的灵活性

至于是否为每个virtualenv安装一个单独的Gunicorn,这无疑是一种方法,它可以让您灵活地在新项目上使用新版本Gunicorn的功能,而不会破坏现有版本


简短回答:每个项目都需要单独的Gunicorn实例;您是否有单独的安装也取决于您,但这可能会为您节省时间和麻烦。

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

我们在整个流程系统中使用一个主管来控制所有流程

我们还有一个nginx进程,用于处理所有应用程序的所有流量(反向代理、服务静态媒体等)

我们决定使用这种方法,因为它似乎是最明智、最容易单独设置和控制每个应用程序的方法。使用supervisor自行启动/停止/重新加载每个应用程序,使我们能够更精确地控制我们想要做的事情。它还使添加更多应用程序变得非常容易,并且不会影响机器上已经存在的应用程序

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

如果您对所有内容都运行一个版本的gunicorn,并且该gunicorn进程发生任何问题,那么它将影响您的所有应用程序,这并不理想。它还限制了您可以执行的操作,如果您希望在一个应用程序上运行eventlet,在另一个应用程序上运行gevent,在另一个应用程序上运行sync,那么如果它们都单独运行,则更容易实现。此外,一些应用程序可能需要比其他应用程序更多的进程,如果它们是分开的,则更容易配置这些进程

如果使用apache方法,可能会减少总体资源占用,因为不必为每个应用程序运行相同进程的多个版本。如果你的资源有限,这可能是一个更大的交易,但现在的内存和CPU是如此便宜,这不是一个问题

这在很大程度上取决于每个应用程序将获得多少流量。如果你根本没有获得任何流量,那么就做最容易设置和维护的事情。如果你正在获得大量的流量,或者计划获得大量的流量,那么你现在设置的内容可能会在超出当前设置后再次更改