使用Django w / mod_wsgi和Apache

时间:2017-09-03 03:08:49

标签: python django apache mod-wsgi

我一直在努力研究如何在生产中设置Django应用程序,以便在部署时做好准备。我正在使用Django v1.11,我的EC2正在运行Ubuntu 14.04。我一直试图引用this guide作为参考,但它不是Ubuntu特有的,所以我在这方面遇到了一些困难。我已经提到了其他一些资源,但其中很多内容似乎已经过时了。

我在本地计算机上设置了主机规则,将www.example.com指向我的EC2实例的公共IP地址。

我有一个生活在/home/django/example.com/ENV的virtualenv设置。我的Django项目直接在/home/django/example.com。项目名称为mysite,使用django-admin startproject mysite生成,因此它在wsgi.py目录中具有默认的/home/django/example.com/mysite文件。 wsgi.py的内容如下:

"""
WSGI config for mysite project.

It exposes the WSGI callable as a module-level variable named ``application``.

For more information on this file, see
https://docs.djangoproject.com/en/1.11/howto/deployment/wsgi/
"""

import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")

application = get_wsgi_application()

我尝试添加VirtualHost规则,例如:

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com

    WSGIScriptAlias / /home/django/example.com/mysite/wsgi.py

    <Directory "/home/django/example.com/mysite">
        <Files wsgi.py>
            Require all granted
        </Files>
    </Directory>
</VirtualHost>

同样,我尝试添加:

Include /etc/apache2/httpd.conf

/etc/apache/apache2.conf然后扔掉以下内容:

WSGIScriptAlias / /home/django/example.com/mysite/wsgi.py
WSGIPythonHome /home/django/example.com/ENV
WSGIPythonPath /home/django/example.com

<Directory /home/django/example.com/mysite>
    <Files wsgi.py>
        Require all granted
    </Files>
</Directory>

进入httpd.conf

在任何一种情况下,我之后都直接重新启动了Apache服务器。

我没有得到任何进一步的打击&#34; 500内部服务器错误&#34;或者点击&#34; ERR_EMPTY_RESPONSE&#34;。

任何能够解决a)我出错的地方,b)我可以参考最新指示,或c)我如何排除故障的人?

1 个答案:

答案 0 :(得分:0)

经过大量的故障排除,并咨询格雷厄姆评论中提到的资源,我的VirtualHost需要我所建立的资源:

<VirtualHost *:80>
        ServerName example.com
        ServerAlias www.example.com

        Alias /static /home/django/example.com/static

        <Directory /home/django/example.com/static>
           Require all granted
        </Directory>

        WSGIDaemonProcess mysite python-path=/home/django/example.com:/home/django/ENV/lib/python3.4/site-packages

        WSGIProcessGroup mysite
        WSGIApplicationGroup %{GLOBAL}

        WSGIScriptAlias / /home/django/example.com/mysite/wsgi.py

        <Directory /home/django/example.com/mysite>
            Require all granted
        </Directory>
</VirtualHost>

以下是我确定的wsgi.py的内容:

"""
WSGI config for mysite project.

It exposes the WSGI callable as a module-level variable named ``application``.

For more information on this file, see
https://docs.djangoproject.com/en/1.11/howto/deployment/wsgi/
"""

import os, sys

from django.core.wsgi import get_wsgi_application

path = '/home/django/example.com'
if path not in sys.path:
    sys.path.append(path)

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")

值得注意的是(仅仅因为它对我来说并不是很明显),有必要指明:

STATIC_ROOT = '/home/django/example.com/static'
<{1>}中的

,并运行settings.py将所有应用程序中的静态文件收集到所述python manage.py collectstatic中。

我希望将来可以帮助其他人!