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)
10/02/2012
Publicado por en 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!
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
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 🙂