En este post voy a mostrarles como desplegar una aplicación web hecha con Django 1.5 (usando Python 2.7 y virtualenv), en un servidor web Apache (versión 2.2), en Ubuntu 13.04
En mi caso mi aplicación se llama visor y quisiera acceder a él usando la URL visor.local
1) Instalar el módulo mod_wsgi de Apache
sudo apt-get install libapache2-mod-wsgi
2) Reiniciar Apache para que cargue el módulo
sudo service apache2 restart
3) Verificar que el módulo se ha cargado y está habilitado
apache2ctl -M
En la lista resultante deberíamos observar algo como
wsgi_module (shared)
4) Crear el archivo de configuración en sites-available
cd /etc/apache2/sites-available
cp default visor
sudo vim visor
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName visor.local
ServerAlias visor
DocumentRoot /var/www/visor/
#La carpeta collected es donde almaceno todos los assets procesados
#con el comando "python manage.py collectstatic". Esta carpeta está
#definida en la variable STATIC_ROOT en settings.py
Alias /static/ /var/www/visor/collected/
<Directory /var/www/visor/collected>
Order deny,allow
Allow from all
</Directory>
#En el path defino tanto la ruta de mi app como la de mi
#entorno virtual (virtualenv)
WSGIDaemonProcess visor python-path=/var/www/visor:/home/david/.python-env/visor/lib/python2.7/site-packages
WSGIProcessGroup visor
WSGIScriptAlias / /var/www/visor/visor/wsgi.py
<Directory /var/www/visor/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
5) Activo el nuevo sitio: Ejecuto el siguiente comando dentro de la misma carpeta sites-available
a2ensite visor
6) Modifico el archivo de hosts
sudo vim /etc/hosts
127.0.0.1 localhost
127.0.1.1 silicio
127.0.0.1 visor.local
# 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
7) Reinicio el Apache
sudo service apache2 restart
Y listo, ya podemos ir a nuestro navegador web e ingresar la dirección visor.local y deberíamos ver nuestra aplicación funcionando.