Nginx + GUnicorn + Flask + www-data 用户 - 文件锁定

Nginx + GUnicorn + Flask + www-data 用户 - 文件锁定

我有一些非常基本的问题,关于在 Ubuntu(14.10)上的 Gunicorn(19.0-1)中结合 Nginx 部署 Flask 应用程序。

由于此应用程序与 Web2Py 并存,因此我遵循Web2Py 制作的网站锁定指南并对我的 Flask 应用程序应用了相同的策略。

在这个例子中,Gunicorn 工作者以 www-data 用户身份运行,并且通过将 www-data 组设为所有者、将 www-data 设为组来锁定 /var/www 中的文件和源。

然而,有几点让我感到困惑:

  1. 尽管 Gunicorn 工作进程以 www-data 身份运行,但 Gunicorn 服务器守护进程以 root 身份运行。这会引起担忧吗?
  2. 搜索 Nginx + Gunicorn + Flask 会得到建议通过 Supervisord 而不是 init.d 服务运行 Gunicorn 的网站。我应该考虑切换吗?
  3. 由于 www-data 帐户已被锁定(没有 shell/没有密码),使用 VM 的开发人员可以在哪里运行他们的代码,以便环境尽可能接近生产环境?

答案1

我自己使用 Flask 与 Nginx 和 Gunicorn,因此我会尽力回答:

1) 有可能,但是根据我自己的研究和经验,最好不要以守护进程模式运行 Gunicorn,而是使用某种专用的进程管理器(如 Supervisor)。

2) Supervisor 和 init.d 的用途并不完全一样。Init.d 是一个“初始化守护进程”,其目的是成为启动所有其他服务(例如 Gunicorn)的服务。Supervisor 是一个进程控制管理器,可用于启动其他服务以及监控和在出现问题时重新启动它们。但是,Supervisor 仍然需要 init.d(或其后继 Upstart)在启动时启动它。我更喜欢使用 Supervisor,因为它易于使用,并允许我快速启动、停止和/或重新启动 Gunicorn 工作程序。

3). 您通常会拥有某种专用的开发环境,它是生产环境的副本。我个人使用 3 台云服务器,1 台用于生产环境,1 台用于准备环境(即确保应用程序正确部署的测试场地),1 台用于开发环境。准备环境和开发环境都是生产环境的副本。

相关内容