【问题标题】:How to run Daphne and Gunicorn At The Same Time?如何同时运行 Daphne 和 Gunicorn?
【发布时间】:2020-07-20 21:35:26
【问题描述】:

我正在使用django-channels,因此我需要使用daphne,但对于静态文件和其他我想使用gunicorn 的东西。我可以同时启动daphnegunicorn,但我不能同时启动它们。

我的问题是我应该同时启动它们还是有更好的选择? 如果应该我该怎么做?

这是我正在运行的服务器命令:

gunicorn app.wsgi:application --bind 0.0.0.0:8000 --reload && daphne -b 0.0.0.0 -p 8089 app.asgi:application

PS: 我将location//ws/ 拆分为gunicorndaphnenginx.conf 中。

【问题讨论】:

    标签: django nginx gunicorn daphne


    【解决方案1】:

    您的问题是您在同一上下文/行中调用两个进程,而一个永远不会被调用,因为第一个永远不会“结束”。

    这个过程:gunicorn app.wsgi:application --bind 0.0.0.0:8000 --reload

    不会在任何时候终止,因此除非您手动终止该命令,否则 && 命令永远不会运行,那时我不确定这不会完全终止整个进程链。

    如果你想同时运行这两个进程,你可以使用 & 例如后台运行两个进程

    (无法测试,但这应该可以)

    gunicorn app.wsgi:application --bind 0.0.0.0:8000 --reload & daphne -b 0.0.0.0 -p 8089 app.asgi:application &
    

    关于此类问题的教人钓鱼信息是here

    我相当肯定你会失去正常的控制台日志记录,你通常会在后台运行这些日志,因此我建议查看nohup 而不是& 或将日志发送到带有日志记录的地方实用程序,这样您就不会失明。

    至于其他选项,如果您计划扩展到大量用户,可能超过 100 个,我将只运行两台服务器,一台用于 wsgi django http 请求,另一台用于 asgi daphne ws 请求。无论您需要什么,都可以在两者之间使用 nginx 代理,然后就完成了。 That's also what channels recommends for larger applications.

    使用 /ws/ 之类的通用路径前缀来区分 WebSocket 连接和普通 HTTP 连接是一种很好的做法,因为它会使在某些配置下将 Channels 部署到生产环境中更加容易。

    特别是对于大型站点,可以配置像 nginx 这样的生产级 HTTP 服务器,以根据路径将请求路由到 (1) 像 Gunicorn+Django 这样的生产级 WSGI 服务器,用于普通 HTTP 请求或 (2 ) 一个生产级 ASGI 服务器,例如用于 WebSocket 请求的 Daphne+Channels。

    请注意,对于较小的站点,您可以使用更简单的部署策略,其中 Daphne 服务所有请求 - HTTP 和 WebSocket - 而不是拥有单独的 WSGI 服务器。在此部署配置中,不需要像 /ws/ 这样的公共路径前缀。

    【讨论】:

      【解决方案2】:

      不需要同时运行。Daphne 是一个 HTTP、HTTP2 和 WebSocket 协议服务器。 看看这个链接上的 README: https://github.com/django/daphne

      【讨论】:

      • 请仔细阅读问题,我说我要使用gunicorn。最好的。
      猜你喜欢
      • 2019-02-20
      • 2019-11-25
      • 1970-01-01
      • 2021-07-08
      • 2021-10-06
      • 1970-01-01
      • 2019-11-25
      • 1970-01-01
      • 2022-11-10
      相关资源
      最近更新 更多