Crear aplicación web Django en Server Apache usando WSGI - rmeruane/CC5402-TierraAdentro GitHub Wiki

Previamente a seguir los pasos de esta página, se debe instalar el software necesario descrito en Instalación en Servidor

Subir aplicación web al servidor, y luego ejecutar el siguiente comando:

$ python manage.py collectstatic

Configuración de aplicación web en Apache

Ingresar a Webmin

Click en Servers en menú de la izquierda

Click en Apache Webserver en menú de la izquierda

Click en Create virtual host en pestañas

En Document Root se escribe la ruta donde estará la aplicación. En este caso pusimos "/home/tierra-adentro/public_html/prueba01"

En Server Name se escribe la dirección del host donde estará publicada la aplicación. En nuestro caso pusimos "prueba01.tierra-adentro.hf.cl"

Click en Create Now

Luego, click en Apply Changes (para reiniciar el servidor)

Volvemos a la pestaña de Apache Webserver

Hacer click en el ícono de la aplicación creada

Click en Edit Directives

Dentro de <Directory "/home/tierra-adentro/public_html/iteracion1" > agregar lo siguiente:

  <Files wsgi.py>
    Order deny,allow
    Allow from all
  </Files>

Luego, copiar el siguiente código al final de las directivas del sitio

WSGIScriptAlias / /home/tierra-adentro/public_html/iteracion1/mapu/ta/ta/wsgi.py

alias /static /home/tierra-adentro/public_html/iteracion1/mapu/ta/static
<Directory "/home/tierra-adentro/public_html/iteracion1/mapu/ta/static">
  Order deny,allow
  Allow from all
</Directory>

Finalmente, las directivas debieran verse del siguiente modo

DocumentRoot /home/tierra-adentro/public_html/iteracion1
ServerName iteracion1.desarrollo.tierra-adentro.cl

<Directory "/home/tierra-adentro/public_html/iteracion1">
  allow from all
  Options +Indexes
  <Files wsgi.py>
    Order deny,allow
    Allow from all
  </Files>
</Directory>

WSGIScriptAlias / /home/tierra-adentro/public_html/iteracion1/mapu/ta/ta/wsgi.py

alias /static /home/tierra-adentro/public_html/iteracion1/mapu/ta/static
<Directory "/home/tierra-adentro/public_html/iteracion1/mapu/ta/static">
  Order deny,allow
  Allow from all
</Directory>

WSGI en modo Standard

El último paso consiste en agregar el path de la aplicación web a la variable WSGIPythonPath, la cual se encuentra al final del archivo (en caso de que no exista, se debe crear la variable manualmente). En modo standard el path de las aplicaciones de python es compartido por todas las aplicaciones web del servidor:

/etc/apache2/apache2.conf

Para agregar nueva información a esta variable se debe concatenar mediante :, ejemplo de uso:

WSGIPythonPath /home/tierra-adentro/public_html/iteracion1/mapu/ta:/home/tierra-adentro/public_html/iteracion2/mapu/ta

WSGI en modo Daemon

Para evitar problemas cuando hay aplicaciones Django con el mismo nombre en el servidor, se puede utilizar WSGI en modo Daemon. En modo daemon el path de las aplicaciones de python es propio para cada aplicación web.

Se debe agregar al final de las directivas del sitio:

WSGIDaemonProcess iteracion1 processes=1 threads=5 python-path=/home/tierra-adentro/public_html/iteracion1/mapu/ta
<Location />
  WSGIProcessGroup iteracion1 
  WSGIApplicationGroup %{GLOBAL}
</Location>

Al usar WSGI en modo daemon no hay que declarar la variable WSGIPythonPath en /etc/apache2/apache2.conf

Finalmente

Para que estos cambios sean aplicados es necesario resetear apache mediante Webmin haciendo click en Apply changes o en consola mediante:

/etc/init.d/apache2 restart

Troubleshooting

En caso de querer usar base de datos SQLite3 tanto el archivo de la base de datos como la carpeta padre deben tener permisos de escritura para el usuario www-data (servidor apache).

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