如何配置Apache在Django频道中运行ASGI?是否需要Apache?

Utk*_*nha 7 django websocket django-channels

我构建了一个django项目,并使用Apache-WSGI组合将其部署到生产中.为此,我添加了 apache2.conf,如下所示:

WSGIScriptAlias / /home/ubuntu/MyProject/MyProject/wsgi.py
WSGIPythonPath /home/ubuntu/MyProject

<Directory /home/ubuntu/MyProject/MyProject>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
Run Code Online (Sandbox Code Playgroud)

所以这意味着我的网站的所有请求都不会首先转到Apache,然后允许WSGI发挥作用.因此,如果我关闭Apache,该网站将无法正常工作.

我现在已经安装了Django-Channels.根据文档(https://channels.readthedocs.io/en/latest/deploying.html)中的"部署"部分,我有:

  1. 安装Redis(在我的Django Project服务器上)
  2. 运行工作服务器
  3. 运行Daphne(接口服务器)
  4. 我暂时停止了Apache,网站拒绝连接.

以下是我的疑惑:

  • 达芙妮是否接管Apache作为主服务器?在这种情况下,我是否不再需要Apache而且可以关闭它?
  • 如果仍然需要Apache,我应该在apache2.conf文件中进行哪些设置?

Luk*_*asa 9

目前Apache没有ASGI服务器实现.这意味着你可以继续使用Apache,但你需要Daphne.从本质上讲,Apache将从主要的Web服务器变为反向代理.

这样做可能有一些价值:Python开发人员多年来一直在反向代理模式下运行nginx.但是,Daphne是一个非常强大的Web服务器,构建在Twisted的Web服务器之上,所以Apache当然不是必需的.

那时候,我建议只运行Daphne:让Daphne监听你的主端口并完全禁用Apache.如果你发现你仍然需要Apache的功能,你需要将Apache配置为反向代理:一个建议用于配置的文章来自Digital Ocean.


Utk*_*nha 6

正如Lukasa所提到的,我停止了Apache服务器,该服务器最初阻止我的django应用程序被传送到全世界​​.然后我以root身份运行以下命令:

  • sudo daphne MyProject.asgi:channel_layer --port 80 --bind 0.0.0.0 -v2
  • sudo python manage.py runworker -v2

这两个命令开始将应用程序传递给服务器外部的http请求.除了问题帖子中提到的以外,不需要其他配置.