使用wsgi和Apache部署Django EC2



我在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()
                                        

这是我的.conf文件存储在/etc/apache2/httpd.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/

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

你缺少一个WSGIDaemonProcess指令来对应你对WSGIProcessGroup的使用。

将DocumentRoot设置为应用程序的源代码所在位置是很糟糕的安全实践。

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

建议重新查看Django站点上的mod_wsgi部署文档。

最新更新