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.

⚠️ **GitHub.com Fallback** ⚠️