0
0
mirror of https://github.com/django/django.git synced 2024-12-01 15:42:04 +01:00

Fixed #11229 -- Updated the mod_wsgi deployment documentation to avoid references to mod_python and techniques that are not recommended or required for mod_wsgi. Thanks to Graham Dumpleton for the suggestion and guidance.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@11249 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Russell Keith-Magee 2009-07-16 16:08:18 +00:00
parent 49f0a4bb5b
commit 9fd19c0161

View File

@ -1,69 +1,118 @@
.. _howto-deployment-modwsgi: .. _howto-deployment-modwsgi:
========================================== ==========================================
How to use Django with Apache and mod_wsgi How to use Django with Apache and mod_wsgi
========================================== ==========================================
Deploying Django with Apache_ and `mod_wsgi`_ is the recommended way to get Deploying Django with Apache_ and `mod_wsgi`_ is the recommended way to get
Django into production. Django into production.
.. _Apache: http://httpd.apache.org/ .. _Apache: http://httpd.apache.org/
.. _mod_wsgi: http://code.google.com/p/modwsgi/ .. _mod_wsgi: http://code.google.com/p/modwsgi/
mod_wsgi is an Apache module which can be used to host any Python application mod_wsgi is an Apache module which can be used to host any Python application
which supports the `Python WSGI interface`_, including Django. Django will work which supports the `Python WSGI interface`_, including Django. Django will work
with any version of Apache which supports mod_wsgi. with any version of Apache which supports mod_wsgi.
.. _python wsgi interface: http://www.python.org/dev/peps/pep-0333/ .. _python wsgi interface: http://www.python.org/dev/peps/pep-0333/
The `official mod_wsgi documentation`_ is fantastic; it's your source for all The `official mod_wsgi documentation`_ is fantastic; it's your source for all
the details about how to use mod_wsgi. You'll probably want to start with the the details about how to use mod_wsgi. You'll probably want to start with the
`installation and configuration documentation`_. `installation and configuration documentation`_.
.. _official mod_wsgi documentation: http://code.google.com/p/modwsgi/ .. _official mod_wsgi documentation: http://code.google.com/p/modwsgi/
.. _installation and configuration documentation: http://code.google.com/p/modwsgi/wiki/InstallationInstructions .. _installation and configuration documentation: http://code.google.com/p/modwsgi/wiki/InstallationInstructions
Basic Configuration Basic Configuration
=================== ===================
Once you've got mod_wsgi installed and activated, edit your ``httpd.conf`` file Once you've got mod_wsgi installed and activated, edit your ``httpd.conf`` file
and add:: and add::
WSGIScriptAlias / /path/to/mysite/apache/django.wsgi WSGIScriptAlias / /path/to/mysite/apache/django.wsgi
The first bit above is the url you want to be serving your application at (``/`` The first bit above is the url you want to be serving your application at (``/``
indicates the root url), and the second is the location of a "WSGI file" -- see indicates the root url), and the second is the location of a "WSGI file" -- see
below -- on your system, usually inside of your project. This tells Apache below -- on your system, usually inside of your project. This tells Apache
to serve any request below the given URL using the WSGI application defined by that file. to serve any request below the given URL using the WSGI application defined by that file.
Next we'll need to actually create this WSGI application, so create the file Next we'll need to actually create this WSGI application, so create the file
mentioned in the second part of ``WSGIScriptAlias`` and add:: mentioned in the second part of ``WSGIScriptAlias`` and add::
import os import os
import sys import sys
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings' os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'
import django.core.handlers.wsgi import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler() application = django.core.handlers.wsgi.WSGIHandler()
If your project is not on your ``PYTHONPATH`` by default you can add:: If your project is not on your ``PYTHONPATH`` by default you can add::
sys.path.append('/usr/local/django') sys.path.append('/usr/local/django')
just above the final ``import`` line to place your project on the path. Remember to just above the final ``import`` line to place your project on the path. Remember to
replace 'mysite.settings' with your correct settings file, and '/usr/local/django' replace 'mysite.settings' with your correct settings file, and '/usr/local/django'
with your own project's location. with your own project's location.
See the :ref:`Apache/mod_python documentation<howto-deployment-modpython>` for Serving media files
directions on serving static media, and the `mod_wsgi documentation`_ for an ===================
explanation of other directives and configuration options you can use.
Django doesn't serve media files itself; it leaves that job to whichever Web
Details server you choose.
=======
We recommend using a separate Web server -- i.e., one that's not also running
For more details, see the `mod_wsgi documentation`_, which explains the above in Django -- for serving media. Here are some good choices:
more detail, and walks through all the various options you've got when deploying
under mod_wsgi. * lighttpd_
* Nginx_
.. _mod_wsgi documentation: http://code.google.com/p/modwsgi/wiki/IntegrationWithDjango * TUX_
* A stripped-down version of Apache_
* Cherokee_
If, however, you have no option but to serve media files on the same Apache
``VirtualHost`` as Django, you can set up Apache to serve some URLs as
static media, and others using the mod_wsgi interface to Django.
This example sets up Django at the site root, but explicitly serves ``robots.txt``,
``favicon.ico``, any CSS file, and anything in the ``/media/`` URL space as a static
file. All other URLs will be served using mod_wsgi::
Alias /robots.txt /usr/local/wsgi/static/robots.txt
Alias /favicon.ico /usr/local/wsgi/static/favicon.ico
AliasMatch /([^/]*\.css) /usr/local/wsgi/static/styles/$1
Alias /media/ /usr/local/wsgi/static/media/
<Directory /usr/local/wsgi/static>
Order deny,allow
Allow from all
</Directory>
WSGIScriptAlias / /usr/local/wsgi/scripts/django.wsgi
<Directory /usr/local/wsgi/scripts>
Order allow,deny
Allow from all
</Directory>
.. _lighttpd: http://www.lighttpd.net/
.. _Nginx: http://wiki.codemongers.com/Main
.. _TUX: http://en.wikipedia.org/wiki/TUX_web_server
.. _Apache: http://httpd.apache.org/
.. _Cherokee: http://www.cherokee-project.com/
More details on configuring a mod_wsgi site to serve static files can be found
in the mod_wsgi documentation on `hosting static files`_.
.. _hosting static files: http://code.google.com/p/modwsgi/wiki/ConfigurationGuidelines#Hosting_Of_Static_Files
Details
=======
For more details, see the `mod_wsgi documentation on Django integration`_,
which explains the above in more detail, and walks through all the various
options you've got when deploying under mod_wsgi.
.. _mod_wsgi documentation on Django integration: http://code.google.com/p/modwsgi/wiki/IntegrationWithDjango