¡Hola a todos! Hace un tiempo tuve la necesidad de desplegar una aplicación web desarrollada en Python usando como framework al superpoderoso Django. A raíz de esto me topé con la interrogante, de cómo publicar las aplicaciones desarrolladas con Django. Yo era desarrollador de Python desde 2009 pero casi siempre lo que hacía eran aplicaciones desktop, servicios, etc, nunca había sentido la necesidad de desplegar una aplicación Django y para hacer los desarrollos Django que hacía el python manage.py runserver era más que suficiente. Rápidamente buscando en internet di con la forma de publicarlas con Apache y mod_wsgi (vía que no es la más óptima pero que resuelve).

djangoapp

Lo que hoy les traigo es una receta sencilla de cómo desplegar aplicaciones Django en apache usando mod_wsgi, ya que mod_python no se recomienda y en versiones próximas de Django no va a estar soportado.

  • Instalamos el Apache y el mod_wsgi.
sudo apt-get install apache2 libapache2-mod-wsgi
  •  Habilitamos el módulo wsgi y reiniciamos el Apache
sudo a2enmod wsgi && sudo service apache restart
  • Escogemos la ubicación que va a tener nuestro proyecto en producción. En este caso escogí /opt por lo que la dirección completa sería /opt/your_project.
  • Creamos el fichero que va a contener la configuración del virtualhost en /etc/apache2/sites-available/. Si usan Apache 22.4 es muy probable que el nombre de archivo deba tener la extensión .conf.
sudo nano /etc/apache2/sites-available/djangoapp

y ahi colocamos lo siguiente:

# Agregamos el directorio de nuestro proyecto al python path.
WSGIPythonPath /opt/your_project

#Puerto por el que escuchará el apache.
listen 8000

# Declaración del virtualhost.

    ServerAdmin webmaster@localhost

    # Alias de la dirección del archivo donde está la aplicación wsgi 
    # (Generalmente es un archivo que se llama wsgi.py).
    WSGIScriptAlias / /opt/your_project/your_project/wsgi.py

    # Alias de los directorios de ficheros estáticos y de multimedia.
    # Generalmente static y media, si alguno no están presente lo obvian entonces.
    Alias /static/ /opt/your_project/static/
    Alias /media/ /opt/your_project/media/

    # Establecemos los permisos para poder acceder al wsgi.py.
    
        
            Order deny,allow
            Allow from all
            # Si usan Apache 2.4 comenten las dos líneas anteriores 
            # y descomenten la línea que sigue.
            # Required all granted
        
    

    # Establecemos los permisos para poder a los directorios de ficheros estáticos 
    # y de multimedia.
    
        Order deny,allow
        Allow from all
        # Si usan Apache 2.4 comenten las dos líneas anteriores
        # y descomenten la línea que sigue.
        # Required all granted
    
    
        Order deny,allow
        Allow from all
        # Si usan Apache 2.4 comenten las dos líneas anteriores
        # y descomenten la línea que sigue.
        # Required all granted
    

    # Establecemos la configuración tradicional de los logs.
    ErrorLog ${APACHE_LOG_DIR}/pyerror.log
    CustomLog ${APACHE_LOG_DIR}/pyaccess.log combined
  • Activamos el virtualhost y reiniciamos apache
sudo a2ensite djangoapp && sudo service apache2 restart

De esta forma queda publicada, de manera sencilla nuestra aplicación Django. ¡Hasta la próxima!