Enki informático

Vivo en el e-engur-a, lugar sagrado de la informatica y la electrónica

COMO preparar un servidor Apache + virtualhost + python + Django con (libapache2-mod-wsgi)

Este documento explica el primer paso que tienen que hacer los sysadmin para preparar un servicio web adaptado a python con el framework de django en un equipo con Ubuntu 11.10 32bit pero perfectamente aplicable a plataforma de 64bit

1) Instalar apache2 + libapache2-mod-wsgi
sudo aptitude install libapache2-mod-wsgi
Sin importar que el equipo tenga apache2 instalado, aptitude te resolverá todas tus dependencias sin problemas XD

2) Comprobar que el modulo wsgi_module esta cargado en apache2
apachectl -t -D DUMP_MODULES
Si el modulo wsgi_module no se encuentra en la lista entonces:
cd /etc/apache2/mods-available && sudo a2enmod wsgi

3) Instalar Django Framework
sudo aptitude install python-django

4) Preparar el proyecto web con django con el nombre “webproyecto”
cd /var/www/ && sudo django-admin startproject webproyecto
Con este comando creamos una carpeta de proyecto en /var/www/ con nombre “webproyecto” la cual puede ser lo que consideres.

Hasta ahora solo tenemos el proyecto creado con django pero apache no puede reconocer los archivos .py y estos no son ejecutados por el modulo wsgi de apache, por lo que tenemos que configurar manualmente.

5) Creamos una carpeta interna en /var/www/webproyecto con el nombre apache.conf
sudo mkdir /var/www/webproyecto/apache.conf

6) Creamos un archivo web.wsgi para que ejecute archivos .py pero con las instrucciones necesarias para integrar el proyecto al framework de django
sudo touch /var/www/webproyecto/apache.conf/web.wsgi
6.1) Editamos el archivo
sudo nano /var/www/webproyecto/apache.conf/web.wsgi
su contenido debe quedar de acuerdo con las Especificaciones oficiales

import os, sys
sys.path.append('/var/www')
os.environ['DJANGO_SETTINGS_MODULE'] = 'webproyecto.settings'
import django.core.handlers.wsgi
_application = django.core.handlers.wsgi.WSGIHandler()
def application(environ, start_response):
environ['PATH_INFO'] = environ['SCRIPT_NAME'] + environ['PATH_INFO']
if environ['wsgi.url_scheme'] == ‘https’:
environ['HTTPS'] = ‘on’
return _application(environ, start_response)

Nota.
recuerda que la variable os.environ['DJANGO_SETTINGS_MODULE'] corresponde al proyecto..

ahora nos falta configurar el servidor de apache para que ejecute el archivo web.wsgi

7) Configurar apache2 para que pueda correr los archivos .py con Django Framework
7.1) Crear un archivo en blanco en /etc/apache2/sites-available con el nombre que ya usamos para crear el proyecto, en este caso es webproyecto
sudo touch /etc/apache2/sites-available/webproyecto
7.2) Editar el archivo
sudo nano /etc/apache2/sites-available/webproyecto
el contenido del archivo debe quedar así

<virtualhost *:80>
ServerName webproyecto
DocumentRoot /var/www/webproyecto
<Directory /var/www/webproyecto>
Order allow,deny
Allow from all
</Directory>
WSGIDaemonProcess webproyecto.djangoserver processes=2 threads=15 display-name=%{GROUP}
WSGIProcessGroup webproyecto.djangoserver
WSGIScriptAlias / /var/www/webproyecto/apache.conf/web.wsgi
Alias /media /var/www/webproyecto/media/
<Directory /var/www/webproyecto/media>
Order deny,allow
Allow from all
</Directory>
Alias /static/admin /usr/lib/pymodules/python2.7/django/contrib/admin/media/
<Directory /usr/lib/pymodules/python2.7/django/contrib/admin/media>
Order deny,allow
Allow from all
</Directory>
</virtualhost>

Ahora editamos el archivo hosts para poder acceder al proyecto con el nombre webproyecto
sudo nano /etc/hosts
buscar la linea donde tienes la direccion 127.0.0.1 y agregar al final de esa linea webproyecto quedando algo como
127.0.0.1 localhost.localdomain localhost webproyecto

Ya apache esta configurado, solo nos faltaría activar el nuevo sitio
cd /etc/apache2/sites-available && sudo a2ensite webproyecto && sudo service apache2 stop && sudo service apache2 start

nos vamos al navegador, escribimos webproyecto y obtenemos un bonito It worked!

2 Respuestas a “COMO preparar un servidor Apache + virtualhost + python + Django con (libapache2-mod-wsgi)

  1. oriel 26/07/2012 en 11:33

    hola, quiero publicar mi sitio utilizando apache, anduvo tod bien, hasta la ultima instruccion, configuracion del host. ahi empezaron los problemas, te agradeceria si le das un vistazo a la configuracion del mismo. gracias. nota: mi webproyecto se llama pid

    127.0.0.1 localhost.localdomain localhost pid

    # The following lines are desirable for IPv6 capable hosts
    ::1 ip6-localhost ip6-loopback
    fe00::0 ip6-localnet
    ff00::0 ip6-mcastprefix
    ff02::1 ip6-allnodes
    ff02::2 ip6-allrouters

    he removido la linea con el nombre de la maquina y localhost
    127.0.0.1 localhost
    127.0.0.1 hidro1

    • heberbastidas 26/07/2012 en 18:18

      en la carpeta /etc/apache/sites-available existe un archivo (default) al que le copias en la misma carpeta y renombras según el nombre de tu proyecto, como por ejemplo, si tu proyecto se llama pid entonces copias default con el nombre de tu proyecto

      lo haces con el siguiente comando..

      sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/pid

      luego editas tu archivo nuevo (pid) y asegúrate de colocar bajo de la linea
      <virtualhost *:80>
      lo siguiente
      ServerName pid

      recuerda que en la linea
      DocumentRoot /var/www
      va la ruta de la carpeta raíz de tu proyecto, por ejemplo si tu proyecto existe en /home/usuario/www/pid entonces esa ruta debe cambiar..

      igual pasa en
      <Directory /var/www>

      luego ejecutas los comandos

      cd /etc/apache2/sites-available/
      sudo a2ensite pid

      como ya editaste el archivo /etc/hosts ya no te hace falta volver a editarlo de la forma que lo hiciste así que solo te quedaría reiniciar tu servicio apache

      luego la dirección de tu sistema quedaría en http://pid 🙂

Deja un comentario