Pasar a producción con WSGI - GonzaloAfa/centrointernetv2 GitHub Wiki
Para empezar instalaremos el mod_wsgi en Apache.
sudo aptitude install libapache2-mod-wsgi
sudo service apache2 restart
Luego instalamos virtualenv y creamos un directorio de virtualenv vacío en el path de nuestra aplicación.
sudo apt-get install python-virtualenv
virtualenv --no-site-packages venv
A continuación crearemos un archivo mySite.conf en /etc/apache2/sites-available/ y al archivo le agregamos la siguiente información:
<VirtualHost *:80>
ServerName mysite.com
ServerAlias www.mysite.com
DocumentRoot /var/production/myApp
<Directory />
Order Deny,Allow
Deny from all
Options None
AllowOverride None
</Directory>
<Directory /var/production/myApp>
Options None
AllowOverride None
Order allow,deny
allow from all
</Directory>
WSGIDaemonProcess mysite.com python-path=/var/production/myApp:/var/production/myApp/venv/lib/python2.7/site-packages
WSGIProcessGroup misite.com
WSGIScriptAlias / /var/production/myApp/myApp/wsgi.py
</VirtualHost>
A continuación agregamos al archivo WSGI en myAPP/WSGI el siguiente código:
# -.- coding: utf-8 -.-
import os, sys
from myApp import settings
path = settings.PATH
if path not in sys.path:
sys.path.append(path)
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myApp.settings")
from django.core.wsgi import get_wsgi_application
_application = get_wsgi_application()
Además agregamos en settings (myAPP/settings.py) la siguiente variable
PATH = '/var/production/myApp'
Para agregar los archivos estáticos a la página, tenemos que especificarlos también en apache.conf. Primero, los setearemos en la carpeta de estaticos especificados para la aplicación, static/ usando el siguiente comando:
python manage.py collectstatic
Respondemos con "yes" a la solicitud y con esto, creamos una copia de todos los archivos estáticos en la carpeta especificada en settings.py desde la cual los sacará el servidor. Luego, en mySite.conf, debemos incluir las siguientes lineas:
Alias /static/ /directorio-app/static/
<Directory /directorio-app/static/>
Order deny,allow
Allow from all
</Directory>
con lo cual nuestra aplicación debería poder correr ya efectivamente en nuestro servidor local en modo producción. Para comprobar esto, primero setiemos la variable DEBUG=False en el archivo settings.py, además de incluir en nuestros host permitidos nuestra dirección, es decir seteamos la variable ALLOWED_HOSTS = ['localhost', '127.0.0.1']. Ahora por último, sólo queda reiniciar el servidor apache con el comando:
Terminamos agregando la configuración de nuestro archivo mySite.conf:
sudo a2ensite mySite
sudo /etc/init.d/apache2 restart
Con esto ya se tiene corriendo la información en el servidor.