User Tools

Site Tools


django_con_apache_y_mod_python

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

django_con_apache_y_mod_python [10/07/2008 16:53]
fernando
django_con_apache_y_mod_python [02/05/2009 00:00]
Line 1: Line 1:
-====== Django con Apache y mod_python ====== 
  
- 
-Algunas notas sobre la configuración de [[http://​httpd.apache.org/​docs/​|Apache]] para poder usar [[http://​www.djangoproject.com/​|Django]],​ en particular para permitir la [[instalacion_de_catalis_con_django|instalación de Catalis]]. 
- 
-<​note>​ 
-Estas son notas preliminares que pretenden documentar lo que he estado aprendiendo,​ y orientar a quienes hagan pruebas de instalación de Catalis. No deben considerarse notas para un //usuario final// de Catalis. 
-</​note>​ 
- 
- 
- 
- 
- 
- 
-===== Tres servidores... o uno que vale por tres ===== 
- 
- 
-Empecemos por aclarar para qué necesitamos un servidor web (o varios) al usar Catalis con Django: 
- 
-  - Para servir **contenido dinámico** generado por Django. 
-  - Para servir **archivos estáticos** ("​media",​ en la jerga de Django): css, js, imágenes, xml, html estático, etc. Esto incluye los archivos propios de Catalis, los de [[http://​extjs.com/​products/​extjs/​|Ext JS]], y los que usa Django para la interfaz administrativa. 
-  - Para acceder a las **bases ISIS** vía [[http://​bvsmodelo.bvsalud.org/​php/​level.php?​lang=es&​component=28&​item=2|wxis]] (un ejecutable cgi). 
- 
-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. 
- 
- 
-=== Contenido dinámico === 
- 
-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 [[http://​www.djangoproject.com/​documentation/​modpython/​|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''​). 
- 
- 
-=== Archivos estáticos === 
- 
-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: [[http://​www.djangoproject.com/​documentation/​modpython/#​serving-media-files|Serving media files]]. 
- 
- 
-=== Bases ISIS === 
- 
-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''​. 
- 
- 
- 
- 
-===== Permisos ===== 
- 
-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 [[http://​articles.slicehost.com/​2007/​9/​18/​apache-virtual-hosts-permissions|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//​. 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
-===== Ejemplo de configuración ===== 
- 
-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 **''<​nowiki>​{{/​path/​to/​catalis}}</​nowiki>''​** por el path que corresponda. 
- 
-**NOTA 2:** El uso del puerto 81 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''​. 
- 
- 
-<code apache> 
-# 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 81 
-NameVirtualHost *:81 
- 
-<​VirtualHost *:81> 
- 
-    # ------------------------------------------------------ 
-    # Optional directives 
-    # ------------------------------------------------------ 
-    #ServerName 127.0.0.1 (correct as appropriate) 
-    #​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 
- 
-        # Change this to '​Off'​ in a production environment 
-        PythonDebug On 
- 
-        # Add the directory where the settings live 
-        PythonPath "​['​{{/​path/​to/​catalis}}/​django_files'​] + sys.path"​ 
-    </​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>​ 
-</​code>​ 
- 
- 
- 
-===== Testeo de la configuración ===== 
- 
-**TO-DO:** agregar algo aquí, p.ej. verificar que no se pueda acceder a wxis desde afuera, pero sí en forma local. 
- 
- 
- 
- 
-===== Para Windows ===== 
- 
-(En construcción!) 
- 
-  * Python 
- 
-  * Django 
- 
-  * [[http://​httpd.apache.org/​download.cgi|Apache 2.2]] (versión: ''​apache_2.2.9-win32-x86-openssl-0.9.8h-r2.msi''​) 
- 
-  * [[http://​httpd.apache.org/​modules/​python-download.cgi|mod_python]] (versión: ''​mod_python-3.3.1.win32-py2.5-Apache2.2.exe''​) 
-    * instalar (ejecutar el ''​.exe''​);​ cuando pregunta por la carpeta de Apache, indicar la carpeta ''​Apache2.2''​. 
-    * agregar línea en httpd.conf: ''​LoadModule python_module modules/​mod_python.so''​ 
django_con_apache_y_mod_python.txt · Last modified: 02/05/2009 00:00 (external edit)