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

时间:2016-05-08 09:51:52

标签: python django python-2.7 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>

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

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

  1. 安装Redis(在我的Django Project服务器上)
  2. 运行工作服务器
  3. 运行Daphne(接口服务器)
  4. 此刻我停止了Apache,网站拒绝连接。
  5. 以下是我的疑惑:

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

2 个答案:

答案 0 :(得分:8)

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

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

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

答案 1 :(得分:5)

正如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请求。除了问题帖子中提到的以外,不需要其他任何配置。