我在django上运行5-6个网站。每个django项目都有自己的virtualenv,并提供单个网站。
我目前在virtualenv上安装了gunicorn,因此每个django项目都有自己的gunicorn安装和流程。
这种方法的优点和缺点是什么,以及安装gunicorn系统的替代方案,一个gunicorn安装管理所有网站(如标准的apache设置)。
环境是在linode上运行Ubuntu 11.04的512mb VM。当然,我使用nginx代理对gunicorn的请求。
答案 0 :(得分:6)
在我们的服务器上,我们有多达10种不同的django应用程序都在自己的virtualenv中运行自己的gunicorn。
我们使用一个管理程序系统来控制它们。
我们还有一个nginx进程,可以处理所有应用程序的所有流量(反向代理,服务静态媒体等)。
我们决定使用这种方法,因为它似乎是最安全,最容易设置和控制它自己的每个应用程序。使用主管自己启动/停止/重新加载每个应用程序,使我们能够更好地控制我们想要做的事情。它还使得添加更多应用程序变得非常容易,而不会影响机器上已有的应用程序。
它还允许我们以不同的用户身份运行每个应用程序,这样我们就可以更好地控制这些进程正在做什么,以及他们有什么访问权限,如果您需要担心安全性,那么这很好。如果这些都是您桌面下自己服务器上的所有应用程序,那么这对您来说可能不是问题。
如果您为所有事情运行一个版本的gunicorn,并且那个gunicorn进程发生任何事情,那么它将影响您的所有应用程序,这不是理想的。它还限制了你可以做什么,如果你想在一个应用程序上运行eventlet,在另一个应用程序上运行并在另一个应用程序上同步,如果它们都是单独运行则更容易。此外,某些应用程序可能需要比其他应用程序更多的进程,如果它们是分开的,则更容易配置它。
如果使用apache方法,可能会减少整体资源占用空间,因为您不必为每个应用程序运行相同进程的多个版本。如果您有资源限制,这对您来说可能是一个更大的优惠,但现在内存和CPU非常便宜,这不是问题。
这很大程度上取决于每个应用程序将获得多少流量。如果您根本没有获得任何流量,那么请执行最简单的设置和维护。如果你获得了大量的流量,或者计划获得大量的流量,那么你现在设置的东西,可能会在你超出当前设置后再次改变。
答案 1 :(得分:4)
在我看来,你谈的是三个选择:
我不确定第一个是否可能,但Gunicorn docs似乎都适用于其他两个选项中的一个,我认为它通常需要使用单个WSGI模块生成。此外,您还失去了为个别项目杀死或重启服务器的灵活性,而不会打扰其他项目。
至于是否为每个virtualenv安装一个单独的Gunicorn,这肯定是方法suggested by the Gunicorn team,并且可以让您灵活地在新项目中使用较新版本的Gunicorn中的功能而无需潜在破坏现有版本。
简短回答:你需要为每个项目分别拥有Gunicorn实例;你是否有单独的安装取决于你,但它可能会节省你的时间和头痛。