【问题标题】:Flask + Gunicon + Nginx + Supervisor Non Default Port NumbersFlask + Gunicorn + Nginx + Supervisor 非默认端口号
【发布时间】:2024-04-18 15:55:13
【问题描述】:

我有 2 个需要共同托管的 Flask 应用程序。这是我想要实现的目标:

我正在使用 Gunicorn 运行 App 1(与 App 2 非常相似)。前面有Nginx,我们用Supervisor来管理各个组件。

两个项目都有自己的 virtualenv venv 并安装了所需的包。 我用来通过 Supervisor 启动此应用程序的配置文件。

[program:app1]
command = /home/myuser/proj1/app1/venv/bin/python /home/myuser/proj1/app1/venv/bin/gunicorn app1:app

environment =
    CONFIG_1 = /home/myuser/proj1/conf/config_1.cfg,
    CONFIG_2 = /home/myuser/proj1/conf/config_2.cfg
directory = /home/myuser/proj1/app1
user = myuser
stderr_logfile = /var/log/app1/stderr.log
stdout_logfile = /var/log/app1/stdout.log

我试过了

command = /home/myuser/proj1/app1/venv/bin/python /home/myuser/proj1/app1/venv/bin/gunicorn app1:app -b localhost:9001

但它默认为端口 8000。

有人可以建议我如何让app1 在端口 9001 上运行吗?

提前致谢。

可能有帮助的信息。

  • 操作系统:Ubuntu 14.04.2 LTS
  • Python:2.7.10(venv 内的 2.7.11)
  • 独角兽:17.5
  • 烧瓶:0.10.1

【问题讨论】:

  • 你不是在配置文件中通过更改指定端口吗?

标签: python nginx flask gunicorn supervisord


【解决方案1】:

尝试将其绑定到0.0.0.0:9001,这意味着它将侦听每个可用的接口。

【讨论】:

    【解决方案2】:

    我猜命令应该是:

    command = /home/myuser/proj1/app1/venv/bin/gunicorn app1:app -b localhost:9001
    

    顺便说一下,你可以看看文档:Application Dispatching,在 WSGI 级别上结合了多个烧瓶应用程序。在你的情况下,也许DispatcherMiddleware 会很好:

    from werkzeug.wsgi import DispatcherMiddleware
    from app1 import app as path_one
    from app2 import app as path_two
    
    application = DispatcherMiddleware(path_one, {
        '/path2': path_two
    })
    

    【讨论】: