12

我构建了一个 django-project 并使用 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。根据文档中的“部署”部分(https://channels.readthedocs.io/en/latest/deploying.html),我有:

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

2 回答 2

15

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

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

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

于 2016-05-08T09:56:16.237 回答
7

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

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

这两个命令开始将应用程序交付给来自服务器外部的 http 请求。除了问题帖子中提到的之外,不需要其他配置。

于 2016-05-11T08:54:14.607 回答