如何同时运行达芙妮和Gunicorn?

问题描述 投票:0回答:1

我使用的是 django-channels 因此,我需要使用 daphne 但对于静态文件和其他东西,我想使用的是 gunicorn. 我可以开始 daphne 与...一起 gunicorn 但我不能同时启动他们两个。

我的问题是,我应该同时启动他们两个,还是有什么更好的选择呢?

这是我的运行服务器命令。

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个回答
0
投票

你的问题是你在同一个上下文行中调用了两个进程,其中一个进程从未被调用,因为第一个进程从未 "结束"。

这个进程。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 &

教人钓鱼这类问题的信息是 此处

我很确定你会失去正常的控制台日志,你通常会有在后台运行这些,因此我建议你看一下 nohup 而不是 & 或者用日志工具把日志发到某个地方,这样你就不会盲目飞行了。

至于其他的选择,如果你打算扩大到大量的用户,大概有100多个,我会只运行两个服务器,一个用于wsgi django http请求,一个用于asgi daphne ws请求。两台之间用nginx代理,你需要什么就用什么,就可以了。这也是渠道对大型应用的建议。

使用像ws这样的通用路径前缀来区分WebSocket连接和普通的HTTP连接是一个很好的做法,因为这将使在某些配置中部署Channels到生产环境更容易。

特别是对于大型网站来说,可以配置生产级的HTTP服务器(如nginx),根据路径将请求路由到(1)生产级的WSGI服务器(如Gunicorn+Django)来处理普通的HTTP请求,或者(2)生产级的ASGI服务器(如Daphne+Channels)来处理WebSocket请求。

需要注意的是,对于小型站点,你可以使用更简单的部署策略,在这种情况下,Daphne服务于所有的请求--HTTP和WebSocket--而不是拥有一个单独的WSGI服务器。在这种部署配置中,没有必要使用ws这样的通用路径前缀。

© www.soinside.com 2019 - 2024. All rights reserved.