我在django上运行5-6个网站。每个django项目都在自己的virtualenv中,并为单个网站提供服务。
我目前在每个virtualenv上安装gunicorn,因此每个django项目都有自己的gunicorn安装和进程。
这种方法的优点和缺点是什么,以及另一种选择是在整个系统中安装gunicorn,由一个gunicorn安装来管理所有网站(就像标准的apache设置一样)。
该环境是在linode上运行Ubuntu 11.04的512mb虚拟机。当然,我使用nginx来代理gunicorn的请求。
发布于 2012-01-03 04:51:29
在我们的一堆服务器上,我们有多达10个不同的django应用程序,它们都在自己的virtualenv中运行自己的gunicorn。
我们在整个系统中使用一个supervisor进程来控制所有这些进程。
我们还有一个nginx进程来处理所有应用程序的所有流量(反向代理、服务静态媒体等)。
我们决定使用这种方法,因为它似乎是设置和控制每个应用程序的最合理和最简单的方法。使用supervisor自己启动/停止/重新加载每个应用程序,让我们可以更精细地控制我们想要做的事情。它还使得添加更多应用程序变得非常容易,而不会影响机器上已经存在的应用程序。
它还允许我们以不同的用户身份运行每个应用程序,这样我们就可以更好地控制这些进程在做什么,以及它们有什么访问权限,如果您需要担心安全性,这是很好的。如果这些都是你自己的应用程序,在你自己的服务器上,在你的桌子下,那么这对你来说可能不是问题。
如果你对所有东西都运行一个版本的gunicorn,而那个gunicorn进程发生了任何变化,那么它将影响你所有的应用程序,这是不理想的。这也限制了你能做什么,如果你想在一个应用程序上运行eventlet,在另一个应用程序上运行gevent,在另一个应用程序上同步,如果它们都是分开运行的,那就更容易了。此外,一些应用程序可能比其他应用程序需要更多的进程,如果它们是独立的,则更容易进行配置。
如果使用apache方法,可能会减少总体资源占用,因为您不必为每个应用程序运行同一进程的多个版本。如果你的资源有限,这对你来说可能是一个更大的问题,但现在内存和CPU太便宜了,所以这不是问题。
这在很大程度上取决于每个应用程序将获得多少流量。如果你根本没有得到任何流量,那么就做对你来说最容易设置和维护的事情。如果你正在获得大量的流量,或者计划获得大量的流量,那么一旦你的当前设置超出了当前的设置,那么无论你现在设置了什么,都可能不得不再次改变。
发布于 2011-12-30 21:02:08
在我看来,你说的是三种选择:
适用于所有项目的
中都有一个单独的进程
我甚至不确定第一个是不是可能的,但Gunicorn docs似乎都与其他两个选项之一相适应,我认为它通常需要用一个单独的WSGI模块生成。此外,您还失去了在不干扰其他项目的情况下终止或重新启动单个项目的服务器的灵活性。
至于是否为每个virtualenv安装单独的Gunicorn,这肯定是一种方法suggested by the Gunicorn team,它可以让你在新项目中灵活地使用更新版本的Gunicorn的功能,而不会破坏现有的版本。
简而言之:每个项目都需要单独的Gunicorn实例;是否也有单独的安装取决于您,但这可能会节省您的时间和麻烦。
https://stackoverflow.com/questions/8678766
复制相似问题