【问题标题】:How does Gunicorn work on a server hosting several Flask sites?Gunicorn 如何在托管多个 Flask 站点的服务器上工作?
【发布时间】:2023-03-29 09:59:01
【问题描述】:

--我在使用 NGINX 作为静态服务器/反向代理的 Linode VPS 上部署了几个基于 Flask 的站点。

--通过读取传入的标头并为每个给定站点使用 /etc/nginx .conf 文件,我完全理解了多个站点的工作原理。

--我很难弄清楚安装在 每个 站点的 venv 中的 gunicorn 是如何启动以处理从 VPS 范围的 NGINX 服务器发送的 WSGI 调用的。 p>

--我看到在教程中使用了 supervisord,但仅针对单个站点,而不是在 VPS 级别(如 NGINX)运行的 supervisord 如何为特定站点启动 Gunicorn。我也不清楚为什么每个站点都有自己的 Gunicorn 安装。这是如何工作的?

对不起,如果这重复了其他问题,但我在这里或其他地方找不到任何答案。

【问题讨论】:

  • 您的问题是? “如何在单个服务器实例下启动两个不同的站点(site1.com 在 [127.0.0.1:8000] 运行,site2.com 在 [127.0.0.1:8001] 运行)?”
  • 不完全是,但我认为您是在暗示我应该运行一个 gunicorn 的全局(VPS 范围)实例(具有适当数量的工人)并为每个站点使用不同的 8xxx 端口我想主持。我想我在每个应用程序的 wsgi 代码中都这样做,并使用 supervisord 来确保单个 gunicorn 实例保持运行。那是对的吗?如果是这样,在每个站点的 venv 中安装 gunicorn 二进制文件的原因是什么?
  • 建议(但不强制执行)每个 venv 安装 Gunicorn 二进制文件,以保持站点特定配置(/etc/gunicorn.d)之间的隔离,日志位置保持独立(/var/log/ gunicorn) 和用户/组特定控制。

标签: nginx flask gunicorn supervisord


【解决方案1】:

NGINX 应该将流量重定向到适当的端口。每个烧瓶站点都需要有自己的独角兽工人为其启动。

因此,例如,主管配置中每个站点的运行命令如下所示:

[program:site1]
command=venv1/bin/gunicorn --workers num_workers --bind localhost:8081 flask_app1:app
#etc...

[program:site2]
command=venv2/bin/gunicorn --workers num_workers --bind localhost:8082 flask_app2:app
#etc...

希望这会增加一些清晰度

编辑:

这是一个用于侦听 http 的网站的示例 NGINX 配置。

#Config Contents
server {
    listen       80;
    server_name  site.your.domain;
    # Or use the following if you do not have a domain
    #server_name 123.123.123.123;

    location / {
        proxy_pass http://127.0.0.1:8081;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Scheme $scheme;
    }
}

【讨论】:

  • 非常感谢!这有助于澄清很多事情。您建议直接调用应用程序还是通过 wsgi.py 文件调用该应用程序?另外,您能否确认我在该站点的“/etc/nginx/sites-available/site_x.conf”文件中将上游服务器设置为端口 80xx?最后,一台服务器(2GB w/4 个虚拟内核)上可以同时运行多少个 gunicorn 实例?再次感谢!
  • 通过 wsgi 文件调用很好,因为它允许您在没有 gunicorn 命令行参数的情况下设置配置。 NGINX 反向代理的端口应该与您设置为该站点绑定端口的端口匹配。引用 Gunicorn 阅读文档“通常我们建议 (2 x $num_cores) + 1 作为开始时的工人数量。”
  • 再次感谢布兰农。你最后的补充解决了我所有的问题!
猜你喜欢
  • 2017-09-22
  • 2013-11-11
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 2016-12-06
  • 1970-01-01
  • 2019-08-05
  • 1970-01-01
相关资源
最近更新 更多