运行 nginx/postgres 需要监督 - 需要吗?

running nginx/postgres with supervisord - required?

在我见过的所有标准 django 产品设置模板中,gunicorn 运行 有 supervisor,而 nginx/postgres 没有在 supervisor 下配置。

有什么原因吗?这是生产系统所必需的吗?如果不是,为什么不呢?

在此架构中,Gunicorn 充当运行我们的 Django 代码的应用程序服务器。 Supervisor 只是一个进程管理实用程序,它会在 Gunicorn 服务器崩溃时重新启动它。 Gunicorn 服务器可能因我们的错误代码而崩溃,但 nginx 和 postgres 保持完好。所以在基本配置中,我们只通过 supervisor 来管理 gunicorn 进程。尽管我们也可以对 nginx 和 postgres 做同样的事情。

你需要 gunicorn 的 supervisor,因为它是一个简单的服务器,没有任何工具来重新启动它,运行 它在系统启动时,在系统关闭时停止它,或者在它崩溃时重新加载。

Postgresql 和 nginx 可以在这方面照顾好自己,所以他们没有必要 运行ning 在 supervisor 之下。

实际上,您可以只使用 init.d、upstart 或 system.d 来启动、停止和重新启动 gunicorn,supervisor 只是处理像 gunicorn 这样的小型服务器的更简单方法。

还要考虑 运行 在一个系统上运行多个 Django 应用程序是很常见的,这需要多个独立的 gunicorn 实例。 Supervisor 会比 init、upstart 或 system.d

更好地处理它们

还有一个不需要主管的 uWSGI 服务器,因为它具有处理多个实例、启动、停止以及在代码更改时自动重新加载的内置功能。查看uWSGI emperor系统。