我在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.py
或httpd.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部署文档。