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
[...] Configurando django y apache con mod_wsgi en ubuntu [...]
Lo hice y funciono :) Gracias Patricio Gómez
Avisame cuando amplies este post…
buenas amigos, tengo un problema, hize todos los pasos, pero me dice Forbidden por que sera??
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
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 [...]
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