【问题标题】:Django EC2 deployment with wsgi and Apache使用 wsgi 和 Apache 部署 Django EC2
【发布时间】:2014-07-15 15:07:18
【问题描述】:

我在 EC2 上有一个安装了 Django 的微型实例。我还按照几个教程安装了 mod-WSGI、PostgreSQL 等。 最后,我从 bitbucket 中提取了我的项目并在我的 EC2 上启动了 Apache。不幸的是,我唯一拥有的是默认的 Apache 页面,而且我已经花了一天一夜的时间阅读并试图找出我做错了什么。

my_project 位于/home/ubuntu 目录中。在它的文件夹中,我有 wsgi.py 文件:

import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "my_project.settings")
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
                                        

这是我存储在/etc/apache2/httpd.conf 中的.conf 文件:

Listen 80
NameVirtualHost *:80
WSGIPythonPath /home/ubuntu/my_project/

<VirtualHost *:80>
    DocumentRoot /home/ubuntu/my_project
    ServerName www.ec2-54-***-104-**.us-west-2.compute.amazonaws.com
    ServerAlias ec2-54-***-104-**.us-west-2.compute.amazonaws.com
    ErrorLog /home/ubuntu/my_project/apache/error_log
    CustomLog /home/ubuntu/my_project/access_log_common

    WSGIScriptAlias / /home/ubuntu/my_project/wsgi.py
    Alias /static/ /home/ubuntu/my_project/static/

    <Directory /home/ubuntu/my_project/static>
        Require all granted
    </Directory>

    <Directory /home/ubuntu/my_project>
        <Files wsgi.py>
            Require all granted
        </Files>
    </Directory>

</VirtualHost>

当我尝试时

/etc/init.d/apache2 stop 

而是:

python manage.py runserver 0.0.0.0:80

它工作正常,我可以从浏览器以 IP 作为 URL 连接到我的应用程序。 它让我明白setting.py 文件很好(我对吗?),问题出在wsgi.pyhttpd.conf 中。

当我停止我的开发服务器并再次启动 Apache 时,我得到了默认的 Apache 页面。你能帮我找出我的文件有什么问题吗?

apache 的权限:

ubuntu@ip-172-**-**-69:~$ ls -ld my_project/
drwxr-xr-x 10 www-data www-data 4096 May 26 19:51 project/

【问题讨论】:

    标签: python django apache amazon-ec2 mod-wsgi


    【解决方案1】:

    您通常不应为 ServerName 使用 IP 地址,它必须是访问站点的主机名 (FQDN)。

    您缺少与您使用 WSGIProcessGroup 相对应的 WSGIDaemonProcess 指令。

    将 DocumentRoot 设置为应用程序源代码所在的位置是一种糟糕的安全做法。

    最后,运行 Apache 的用户通常无法访问用户主目录下的内容。

    建议返回并再次查看 Django 站点上的 mod_wsgi 部署文档。

    【讨论】:

    • 您好,感谢您的回复!我在 httpd.conf 文件中添加了一些更改。我添加了新的 ServerName 和 Alias,我还将 mod_wsgi 从守护程序模式更改为标准并将 WSGIPythonPath 添加到我网站的根目录。然后,我检查了我的根文件夹的权限。我在主题的末尾添加了我的内容。正如我所见,一切都很好……但我仍然有 Apache 默认页面……请问还有其他建议吗?
    • 您使用什么 URL 访问该站点?将语法错误添加到您的 Apache 配置文件中并尝试重新启动 Apache 以查看它是否正在读取您正在编辑的文件。
    • 感谢您指出 Apache 甚至没有阅读我的 wsgi 脚本的问题。我的错误是我没有在我的 apache 目录中的“可用站点”中创建虚拟主机。现在一切正常!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-24
    • 1970-01-01
    • 2014-04-11
    • 2014-05-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多