Configurando django y apache con mod_wsgi en ubuntu

Esta es una receta sencilla de cómo configurar desplegar aplicaciones django en apache usando mod_wsgi, ya que mod_python está desaconsejado y en versiones próximas de django no va a estar soportado.

Ahora vamos a hacer dos configuraciones, una simplemente para ver que ande mod_wsgi y la otra para que haga andar nuestro proyecto.

Creamos un servidor de prueba

Empezamos con la configuración para verificar que esté andando mod_wsgi.

Comenzamos instalando mod-wsgi para apahce. Si no teníamos apache o django, los instalamos también!

patricio@plg:~$ sudo apt-get install libapache2-mod-wsgi

Creamos el directorio donde alojar el proyecto de pruebas

/home/patricio/dev/django/test/

En ese directorio creamos el archivo app.wsgi con la respuesta http para probar que funciona el mod_wsgi

def application(environ, start_response):
    status = '200 OK'
    output = 'Hello World!'

    response_headers = [('Content-type', 'text/plain'),
                        ('Content-Length', str(len(output)))]
    start_response(status, response_headers)

    return [output]

Editamos el arcivo /etc/hosts para que resuelva nuestra petición agregando estas líneas

127.0.1.1	djangoserver
127.0.1.1	test.djangoserver

Ahora creamos un host virtual llamado test-wsgi:

sudo gedit /etc/apache2/sites-available/test-wsgi

y ahi ponemos lo siguiente:

<VirtualHost *:80>

    ServerName test.djangoserver
    DocumentRoot /home/patricio/dev/django/test

    <Directory /home/patricio/dev/django/test >
        Order allow,deny
        Allow from all
    </Directory>

    WSGIScriptAlias / /home/patricio/dev/django/test/app.wsgi

</VirtualHost>

ahora activamos el host virtual y reiniciamos apache:

sudo a2ensite test-wsgi
sudo /etc/init.d/apache2 reload

Esto es todo, probamos que todo esté andando

http://test.djangoserver

Debería devolver un hermoso y original “Hello World”

Configuramos mod_wsgi en nuestro proyecto

El proceso es similar al anterior.

Trabajaremos sobre un proyecto django llamado “proyecto”. De nuevo muy originales!

Creamos un archivo llamado django.wsgi

/home/patricio/dev/django/proyecto/apache/django.wsgi

con el siguiente contenido

import os
import sys

sys.path.append('/home/patricio/dev/django')
sys.path.append('/home/patricio/dev/django/proyecto')

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

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

Ahora creamos la entrada en hosts.conf

127.0.1.1	proyecto.djangoserver

creamos el host virtual, lo activamos y reiniciamos apache

sudo gedit /etc/apache2/sites-available/proyecto
<VirtualHost *:80>

    ServerName test.djangoserver
    DocumentRoot /home/patricio/dev/django/proyecto

    <Directory /home/patricio/dev/django/proyecto >
        Order allow,deny
        Allow from all
    </Directory>

    WSGIDaemonProcess proyecto.djangoserver processes=2 threads=15 display-name=%{GROUP}
    WSGIProcessGroup proyecto.djangoserver

    WSGIScriptAlias / /home/patricio/dev/django/proyecto/apache/django.wsgi

</VirtualHost>
sudo a2ensite proyecto
sudo /etc/init.d/apache2 reload

Finalizada la configuración básica, para probarlo

http://proyecto.djangoserver

Esto es solamente la configuración básica, para mayores detalles, ir al sitio oficial de mod_wsgi

http://code.google.com/p/modwsgi/wiki/IntegrationWithDjango

Buscar temas relacionados

Búsqueda personalizada

7 Comments

[...] Configurando django y apache con mod_wsgi en ubuntu [...]

MiAdiseñoMarch 7th, 2011 at 5:50 pm

Lo hice y funciono :) Gracias Patricio Gómez
Avisame cuando amplies este post…

franklin sarmientoMarch 30th, 2011 at 6:53 pm

buenas amigos, tengo un problema, hize todos los pasos, pero me dice Forbidden por que sera??

PatricioMarch 30th, 2011 at 7:11 pm

Hola Frnaklin, te está dando un error de Forbidden, lo que significa que no tenés permisos para verlo, cambiale los permisos para que el usuario/grupo de apache pueda verlo.
saludos

AlvaroApril 26th, 2011 at 5:10 am

Gracias por el post, me funcionó. También tuve problemas con el mensaje “Forbidden” que solucioné poniendo al usuario Apache como propietario: chown -R www-data (carpeta_proyecto). Saludos

[...] del rotundo éxito de cómo usar django con apache y mod_wsgi y demostradas las virtudes de utilizar virtualenv, veamos como usar todo esto [...]

BarcelóAugust 29th, 2011 at 10:12 am

Yo he seguido esta guía tambien, el test me funciono bien, pero intentando con mi proyecto he tenido problemas.

este es mi vhost:

----------------------------------------------------------------------------

ServerName asl.domain.com
DocumentRoot /home/barcel0/dev/django/club_de_amigos

Order allow,deny
Allow from all

WSGIDaemonProcess asl.domain.com processes=2 threads=15 display-name=%{GROUP}
WSGIProcessGroup asl.domain.com

WSGIScriptAlias / /home/barcel0/dev/django/club_de_amigos/apache/django.wsgi

ErrorLog ${APACHE_LOG_DIR}/asl_error.log

# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

CustomLog ${APACHE_LOG_DIR}/asl_access.log combined

----------------------------------------------------------------------

Cuando intento acceder a http://asl.ssp.co.cu recivo esto:
——————————————————————–
Internal Server Error

The server encountered an internal error or misconfiguration and was
unable to complete your request.

Please contact the server administrator, [no address given] and inform
them of the time the error occurred, and anything you might have done
that may have caused the error.

More information about this error may be available in the server error log.
Apache/2.2.15 (Debian) Server at asl.domain.com Port 80
————————————————————————————————–
Y en el log aparece esto:
—————————————————————————————————

[Mon Aug 29 08:58:38 2011] [error] [client 192.168.70.14] mod_wsgi
(pid=22458): Target WSGI script
‘/home/barcel0/dev/django/club_de_amigos/apache/django.wsgi’ cannot be
loaded as Python modu$
[Mon Aug 29 08:58:38 2011] [error] [client 192.168.70.14] mod_wsgi
(pid=22458): Exception occurred processing WSGI script
‘/home/barcel0/dev/django/club_de_amigos/apache/django.wsgi’.
[Mon Aug 29 08:58:38 2011] [error] [client 192.168.70.14] Traceback
(most recent call last):
[Mon Aug 29 08:58:38 2011] [error] [client 192.168.70.14] File
“/home/barcel0/dev/django/club_de_amigos/apache/django.wsgi”, line 9,
in
[Mon Aug 29 08:58:38 2011] [error] [client 192.168.70.14] import
django.core.handlers.wsgi
[Mon Aug 29 08:58:38 2011] [error] [client 192.168.70.14] File
“/usr/local/lib/python2.6/dist-packages/django/core/handlers/wsgi.py”,
line 11, in
[Mon Aug 29 08:58:38 2011] [error] [client 192.168.70.14] from
django.core import signals
[Mon Aug 29 08:58:38 2011] [error] [client 192.168.70.14] File
“/usr/local/lib/python2.6/dist-packages/django/core/signals.py”, line
1, in
[Mon Aug 29 08:58:38 2011] [error] [client 192.168.70.14] from
django.dispatch import Signal
[Mon Aug 29 08:58:38 2011] [error] [client 192.168.70.14] File
“/usr/local/lib/python2.6/dist-packages/django/dispatch/__init__.py”,
line 9, in
[Mon Aug 29 08:58:38 2011] [error] [client 192.168.70.14] from
django.dispatch.dispatcher import Signal, receiver
[Mon Aug 29 08:58:38 2011] [error] [client 192.168.70.14] ImportError:
cannot import name receiver

que debo hacer para solucionarlo!? :-s

Leave a comment

Your comment