Algunas notas sobre la configuración de Apache para poder usar Django, en particular para permitir la instalación de Catalis.
Empecemos por aclarar para qué necesitamos un servidor web (o varios) al usar Catalis con Django:
Esta situación puede dar lugar a diversas configuraciones, desde usar un servidor separado para cada una de las tres funciones, hasta usar uno solo, pasando por combinaciones intermedias. En la práctica, parecería que lo más sencillo y conveniente será manejar las tres funciones desde un único servidor, como veremos en el ejemplo de más abajo.
Veamos ahora algunas observaciones particulares.
El ítem 1 es el único que requiere que Apache use el módulo mod_python. La documentación oficial de Django sobre esta cuestión puede verse en How to use Django with mod_python.
(TO-DO: incluir alguna información mínima sobre cómo instalar/activar mod_python; p.ej. en Ubuntu se instala libapache2-mod-python
).
Para el ítem 2 podemos usar el mismo servidor (o host virtual) que el usado para el ítem 1, aunque también podríamos usar un servidor (o host virtual) separado. Según lo que decidamos, habrá que ajustar las variables correspondientes en el archivo settings.py
asociado a Catalis.
La documentación oficial de Django nos da una guía para configurar Apache apropiadamente en este aspecto: Serving media files.
El ítem 3 requiere una atención particular. A diferencia de los otros dos ítems, aquí no se trata de atender peticiones “externas” —esto es, desde un browser— sino peticiones “internas”, hechas desde el código Python (pywxis.py) que se ejecuta en el servidor del ítem 1. Esta distinción no es de importancia mientras trabajemos en forma local —servidor y browser en la misma máquina—, pero debe ser tenida en cuenta al poner la aplicación en un servidor accesible en forma remota, pues no queremos que wxis sea directamente accesible desde otros clientes. Aquí también tenemos la opción de usar el mismo servidor (o host virtual), o bien usar uno separado; la opción elegida se registrará en el archivo settings.py
.
Si usamos SQLite como base de datos para Django, el usuario bajo el cual corre el servidor del ítem 1 (e.g. www-data) debe tener permiso de escritura sobre el archivo de la base (*.sqlite
), y sobre el directorio que lo contiene. Esto puede lograrse p.ej. con los comandos:
sudo chgrp -R www-data /path/to/sqlite_dir sudo chmod -R 2750 /path/to/sqlite_dir
Para poder crear o modificar bases ISIS, el usuario bajo el cual corre el servidor del ítem 3 debe tener permiso de escritura sobre los archivos de estas bases y los directorios que las contienen, p.ej. de esta manera:
sudo chgrp -R www-data /path/to/isis_dir sudo chmod -R 2750 /path/to/isis_dir
NOTA: El artículo Apache Virtual Hosts - permissions explica de manera sencilla el tema de configuración de permisos en el contexto de un host virtual de Apache. Aún no entiendo bien por qué el usuario principal (es decir, el dueño de los archivos de Catalis) debería agregarse al grupo www-data.
El siguiente ejemplo usa un único host virtual para ocuparse de las tres funciones descriptas más arriba. Fue testeado en Apache 2.2 sobre Ubuntu 8.04 (Hardy).
NOTA 1: debe reemplazarse /PATH/TO/CATALIS
por el path que corresponda.
NOTA 2: El uso del puerto 8080 es sólo a modo de ejemplo. Si se opta por usar un puerto alternativo para el virtual host, posiblemente la directiva Listen
deba moverse al archivo de configuración ports.conf
(sólo aplicable a Debian/Ubuntu?).
# Apache config for Catalis with Django, 2008-07-03 # Modified 2008-07-04 # Uses a prefix '/catalis' for all URLs # See http://catalis.uns.edu.ar/doku/doku.php/django_con_apache_y_mod_python Listen 8080 NameVirtualHost *:8080 <VirtualHost *:8080> # ------------------------------------------------------ # Optional directives # ------------------------------------------------------ ServerName 127.0.0.1 #DocumentRoot (not needed!) #CustomLog #ErrorLog # ------------------------------------------------------ # 1 - Dynamic content generated by Django # ------------------------------------------------------ # Turn on mod_python for URLs beginning with '/catalis/'. # All requests to these URLs will be handled by Django, # with some exceptions (see below). <Location "/catalis/"> SetHandler python-program PythonHandler django.core.handlers.modpython # Specify which settings file is used SetEnv DJANGO_SETTINGS_MODULE settings # Add the directory where the settings live PythonPath "['/PATH/TO/CATALIS/django_files'] + sys.path" # Change this to 'Off' in a production environment PythonDebug On </Location> # ------------------------------------------------------ # 2 - Static files # ------------------------------------------------------ # Turn off mod_python for serving static files (css, js, images, xml, ...). # Note: in a virtual host we could use instead an appropriate value for DocumentRoot. Alias /catalis/media/ "/PATH/TO/CATALIS/static_files/" <Location "/catalis/media/"> SetHandler None </Location> <Directory "/PATH/TO/CATALIS/static_files/"> Order Allow,Deny Allow from all Options +Indexes </Directory> # ------------------------------------------------------ # 3 - Access to ISIS databases via wxis # ------------------------------------------------------ # We want to run wxis using '/catalis/cgi-bin/wxis' ScriptAlias /catalis/cgi-bin/ "/PATH/TO/CATALIS/cgi-bin/" # Turn off mod_python here too <Location "/catalis/cgi-bin/"> SetHandler None </Location> # Restrict access only to clients running on the same machine. <Directory "/PATH/TO/CATALIS/cgi-bin"> Order Deny,Allow Deny from all Allow from 127.0.0.1 </Directory> </VirtualHost>
TO-DO: agregar algo aquí, p.ej. verificar que no se pueda acceder a wxis desde afuera, pero sí en forma local.
(En construcción!)
apache_2.2.9-win32-x86-openssl-0.9.8h-r2.msi
). Instalacion tipica, como servicio.mod_python-3.3.1.win32-py2.5-Apache2.2.exe
).exe
); cuando pregunta por la carpeta de Apache, indicar la carpeta Apache2.2
.httpd.conf
:LoadModule python_module modules/mod_python.so
conf/extra/catalis.conf
y pegar allí la configuración sugerida más arriba (haciendo los cambios apropiados). Agregar esta línea al final de conf/httpd.conf
:Include conf/extra/catalis.conf