Django在EC2上使用wsgi和Apache部署
我在EC2上有一个微型实例,里面安装了Django。我还按照几个教程安装了mod-WSGI、PostgreSQL等。最后,我从bitbucket上拉取了我的项目,并在EC2上启动了Apache。不幸的是,我看到的只有默认的Apache页面,我已经花了一整天一夜在研究和尝试找出我哪里做错了。
我的项目在/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地址访问我的应用。这让我明白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/
1 个回答
1
通常情况下,你不应该用IP地址来设置ServerName,应该用网站的主机名(完整域名)来访问。
你缺少一个WSGIDaemonProcess指令,这个指令是为了配合你使用的WSGIProcessGroup。
把DocumentRoot设置为你的应用程序源代码所在的位置是一个不好的安全做法。
最后,用户的主目录下的内容通常是Apache运行的用户无法访问的。
建议你回去再看看Django网站上的mod_wsgi部署文档,作为开始。