如何在 Django Channels 中将 Apache 配置为 运行 ASGI?甚至需要 Apache 吗?

How to configure Apache to run ASGI in Django Channels? Is Apache even required?

我构建了一个 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>

所以这意味着并不是所有对我网站的请求都首先转到 Apache,然后允许 WSGI 发挥作用。因此,如果我关闭 Apache,该网站将无法运行。

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

  1. 已安装 Redis(在我的 Django 项目服务器上)
  2. 运行 工作服务器
  3. 运行达芙妮(接口服务器)
  4. 我现在已经停止了 Apache,网站拒绝连接。

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

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

那一刻,我建议 运行 与 Daphne 一起使用:让 Daphne 监听您的主要端口并完全禁用 Apache。如果您发现仍然需要 Apache 的某些功能,则需要将 Apache 配置为反向代理:一篇关于配置的推荐文章是 this one from Digital Ocean.

正如 Lukasa 所提到的,我停止了 Apache 服务器,这首先阻止了我的 django 应用程序向世界发布。 然后我 运行 以下命令:

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

这两个命令开始将应用交付给来自服务器外部的 http 请求。除了问题 post.

中提到的以外,不需要其他配置