使用apache和mod_wsgi部署Django站点

时间:2011-05-01 17:24:10

标签: django apache2 mod-wsgi

我一直在努力教自己创建和部署Django应用程序。我已经创建了一个测试项目,我可以使用Django测试服务器浏览它。现在我想使用apache和mod_wsgi来部署它。

我按照Quick Installation Guide的安装说明安装了mod_wsgi。然后我浏览了Quick Configuration Guide中的示例,并且能够在浏览器中成功连接到示例输出。

我现在转到Integration With Django部分,我无法取得任何进展。每当我尝试浏览我为项目设置的URL时,我只会看到默认的apache索引页面。我查看了apache错误日志,其中没有消息(当我调试第一个示例时,我得到了一些,所以我知道我正在查看正确的日志)。我在django项目文件夹中尝试了初始示例wsgi应用程序,但我得到了相同的默认索引页面。我甚至设置了“LogLevel info”来尝试获取更多细节,但没有。

有人有任何建议吗?

这是我的apach2.conf:

LockFile ${APACHE_LOCK_DIR}/accept.lock
PidFile ${APACHE_PID_FILE}
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 15
<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>
<IfModule mpm_worker_module>
    StartServers          2
    MinSpareThreads      25
    MaxSpareThreads      75 
    ThreadLimit          64
    ThreadsPerChild      25
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>
<IfModule mpm_event_module>
    StartServers          2
    MaxClients          150
    MinSpareThreads      25
    MaxSpareThreads      75 
    ThreadLimit          64
    ThreadsPerChild      25
    MaxRequestsPerChild   0
</IfModule>
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}
AccessFileName .htaccess
<Files ~ "^\.ht">
    Order allow,deny
    Deny from all
    Satisfy all
</Files>
DefaultType text/plain
HostnameLookups Off
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
Include mods-enabled/*.load
Include mods-enabled/*.conf
Include httpd.conf
Include ports.conf
LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %O" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
Include conf.d/
Include sites-enabled/

这是我的httpd.com:

ServerName HomeServer
LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so

这是VitualHost:

<VirtualHost *:80>
    ServerName ppbase.homeserver
    ServerAdmin admin@example.com

    DocumentRoot /var/projects/ppbase/ppbase
    <Directory /var/projects/ppbase/ppbase>
        Order allow,deny
        Allow from all
    </Directory>

    LogLevel info

    WSGIScriptAlias / /var/projects/ppbase/django.wsgi
    <Directory /var/projects/ppbase>
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

这是django.wsgi:

import os
import sys


projectpath = '/var/projects/ppbase'
projectapppath = '/var/projects/ppbase/ppbase'
if projectpath not in sys.path:
    sys.path.append(projectpath)
if projectapppath not in sys.path:
    sys.path.append(projectapppath)
os.environ['DJANGO_SETTINGS_MODULE'] = 'ppbase.settings'

import django.core.handlers.wsgi

application = django.core.handlers.wsgi.WSGIHandler()

2 个答案:

答案 0 :(得分:3)

如果你得到“它的作品!”页面上没有任何东西你可以在日志中看到“错误”。

假设您正在使用虚拟主机,这只意味着默认的apache配置“比您的django虚拟主机更好”。

您可以在虚拟主机配置中为您的应用定义更好的规则,或者粗略而简单地禁用默认的apache站点(假设您在* NIX上)

sudo a2dissite default
sudo /etc/init.d/apache2 reload

答案 1 :(得分:1)

算了。我是个白痴。我设置了我的vhost文件,但是我没有在apache中启用它。