如何为apache和django设置mod_wsgi?

时间:2011-02-12 12:18:09

标签: django apache mod-wsgi

我知道已经有很多关于这个主题的信息,但它们非常笨拙,不那么简单和富有表现力。 任何人都可以解释一下如何使用django以及mod_wsgiapache吗?

3 个答案:

答案 0 :(得分:9)

mod_wsgi不是特别适合运行Python WSGI应用程序,或者,如果你更愿意,有更多pythonic方法可以运行你的Django实例。

首先,我认为理解Apache的请求处理模型并正确配置它需要花费很多精力,特别是对于mod_wsgi。如果你没有完全设置或锁定使用Apache,我建议你看一下在Spawning代理后面运行Green Unicornnginx,如@Neo建议。

Spawning和gunicorn的速度非常快,不要求你使用特定的Python解释器编译Apache,并且支持逐步更新你的代码库,为Django和其他开箱即用的钩子提供支持。 nginx,Spawning和gunicorn都有一个简单的处理模型,彼此完全独立,因此您可以获得更加透明的架构,更易于维护和监控。

这是一个伟大的guide关于使用Eric Florenzano设置Django的Spawning,这是项目作者BenoîtChesneau使用gunicorn运行Django的thorough presentation

无论你选择哪种,你都会对@home感觉正确。

答案 1 :(得分:5)

我最近在Django上设置了我的应用程序,这本指南就是我所需要的。 http://blog.stannard.net.au/2010/12/11/installing-django-with-apache-and-mod_wsgi-on-ubuntu-10-04/

基本上,这个过程是

  1. 设置另一台服务器以在端口80上提供静态文件(例如Nginx)。
  2. 在其他端口上设置apache。
  3. 使用mod_wsgi
  4. 在apache上运行django应用程序
  5. 将所有非静态/非媒体文件反转为apache + mod_wsgi / django
  6. 让我知道你被困在哪一步。

答案 2 :(得分:3)

以下是我在Mac上使用来自Mac Ports的Apache,Python和Django的方法。这不一定是最好的方法,但它对我有用。

我有以下顶级目录:

  • lib:python代码,lib / settings.py中的settings.py
  • static:Apache提供的服务,例如:媒体和CSS
  • tools:开发工具,例如推出脚本。

所以这是一个示例站点的Apache配置,然后看下面的Django WSGI脚本:

<VirtualHost *:80>
    # Stuff to served statically is in media directory
    DocumentRoot /Library/WebServer/mysite/static

    ServerName mysite.local

    # Redirect to homepage action
    RewriteEngine on
    RewriteRule ^/$ /mysite/ [R,L]

    # Static dirs first
    Alias /static/ /Library/WebServer/mysite/static/

    <Directory "/Library/WebServer/mysite/static/">
        Order allow,deny
        Allow from all
    </Directory>    

    # Now everything else goes to Django    
    WSGIDaemonProcess mysite-django.local processes=1 threads=5 maximum-requests=0 display-name=%{GROUP} python-path=/Library/WebServer/mysite/lib python-eggs=/tmp
    WSGIProcessGroup mysite-django.local
    WSGIScriptAlias / /Library/WebServer/mysite/lib/apache/django_wsgi.py

    <Directory "/Library/WebServer/mysite/lib/apache">
        Order allow,deny
        Allow from all
    </Directory>    

</VirtualHost>

Django WGCI脚本位于lib / apache / django_wsgi.py中:

import os
import sys

os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'

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