Como usar o Django com o Apache e mod_wsgi

A implantação do Django com Apache e mod_wsgi é a forma recomendada de ter o Django funcionando em produção.

O mod_wsgi é um módulo do Apache que pode ser usado para hospedar qualquer aplicação Python que suporte a Interface WSGI do Python, incluindo o Django. O Django irá funcionar com qualquer versão do Apache que suporte o mod_wsgi.

A documentação oficial do mod_wsgi é fantástica; é sua fonte para todos os detalhes sobre como usar o mod_wsgi. você provavalmente irá querer iniciar com a documentação de instalação e configuração.

Configuração Básica

Uma vez que você tenha o mod_wsgi instalado e ativado, edite o seu arquivo httpd.conf e adicione:

WSGIScriptAlias / /path/to/mysite/apache/django.wsgi

A primeira parte acima é a url na qual você estará servindo sua aplicação (/ indica a url raiz), e a segunda parte é a localização de um "arquivo WSGI" -- veja abaixo -- no seu sistema, normalmente dentro do seu projeto. Isso diz ao Apache para servir quaisquer requisições abaixo de dada URL usando a aplicação WSGI definida por aquele arquivo.

Em seguida, vamos efetivamente criar essa aplicação WSGI, então crie o arquivo mencionado na segunda parte da linha WSGIScriptAlias e adicione:

import os
import sys

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

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

Se o seu projeto não está no PYTHONPATH padrão você pode adicionar:

path = '/path/to/mysite'
if path not in sys.path:
    sys.path.append(path)

logo abaixo das linhas de import.sys para colocar o seu projeto no path. Lembre-se de substituir o 'mysite.settings' como seu arquivo de configurações correto, and '/path/to/mysite' with your own project's location.

Serving files

Django doesn't serve files itself; it leaves that job to whichever Web server you choose.

We recommend using a separate Web server -- i.e., one that's not also running Django -- for serving media. Here are some good choices:

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 /static/ and /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/media/
Alias /static/ /usr/local/wsgi/static/

<Directory /usr/local/wsgi/static>
Order deny,allow
Allow from all
</Directory>

<Directory /usr/local/wsgi/media>
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>

Serving the admin files

Note that the Django development server automagically serves the static files of the admin app, but this is not the case when you use any other server arrangement. You're responsible for setting up Apache, or whichever media server you're using, to serve the admin files.

The admin files live in (django/contrib/admin/static/admin) of the Django distribution.

We strongly recommend using django.contrib.staticfiles to handle the admin files, but here are two other approaches:

  1. Create a symbolic link to the admin static files from within your document root.
  2. Or, copy the admin static files so that they live within your Apache document root.

Detalhes

Para maiores detalhes, veja a documentação do mod_wsgi, que explica os itens acima em maior detalhamento, e lhe dá todas as possibilidades de opções que você tem ao fazer uma implantação no mod_wsgi.