Configurando mod_wsgi

27 Mayo 2011 at 16:18 by Adrián Pérez

Hello worldDespués de la entrada de instalación de mod_wsgi, llega la segunda parte: "peleándome con su configuración". En esta ocasión, al igual que con la instalación, he seguido los pasos de la guía rápida de configuración oficial, que paso a detallar a continuación:

  • En primer lugar, he creado un archivo llamado "myapp.wsgi" con el siguiente código:
def application(environ, start_response):
    status = '200 OK'
    output = 'Hello World!'

    response_headers = [('Content-type', 'text/plain'),
                        ('Content-Length', str(len(output)))]
    start_response(status, response_headers)

    return [output]

Esta es la aplicación WSGI que nos propone el documento de configuración de mod_wsgi para realizar la "configuración rápida".

NOTA: El nombre de la función del script anterior, es "application". Según la documentación, el nombre de la función tiene que ser justamente éste, para que mod_wsgi lo encuentre.

  • Posteriormente he movido el script anterior a un nuevo directorio, el cual debe ser accesible por el mismo usuario que ejecuta el apache.

ubuntu@ubuntuadri:~$ sudo mv myapp.wsgi /usr/local/www/wsgi-scripts/
ubuntu@ubuntuadri:~$ ls -la /usr/local/www/wsgi-scripts/
total 12
drwxr-xr-x 2 root root 4096 2011-05-25 16:40 .

NOTA: Tal y como comenta la guía de configuración, no es recomendable guardar el script WSGI en el mismo directorio DocumentRoot, o en el directorio particular que se esté configurando para la instalación principal de Apache, puesto que esto podría permitir a los usuarios descargar el código fuente de la aplicación, si el directorio también alojase ficheros estáticos.

Tampoco el directorio $HOME es apropiado para ello. En realidad, únicamente es apropiado un directorio específico que únicamente contenga los archivos de la aplicación WSGI.

La documentación, comenta que el siguiente paso es declarar la ubicación de la aplicación WSGI, y cómo se accederá a ésta a través de la web. Esta definición, se ha de introducir en el directorio principal de configuración de Apache.

  • Me aseguro de que /etc/apache2/apache2.conf es el archivo principal de configuración de apache, al ejecutar

ubuntu@ubuntuadri:~$ less /etc/apache2/apache2.conf

y ver que me devuelve, entre las primeras líneas, lo siguiente:

[...]
This is the main Apache server configuration file.
[...]

En este archivo de configuración, sin embargo, veo que se importa la configuración de httpd.conf, la cual tiene la parte de configuración definida por el usuario:

# Include all the user configurations:
Include httpd.conf

  • He decidido hacer una copia del archivo httpd.conf, y le he añadido la siguiente línea de código:

WSGIScriptAlias /myapp /usr/local/www/wsgi-scripts/myapp.wsgi

El primer argumento de la línea anterior (/myapp) hace referencia a la url a través de la cual se accederá a la aplicación WSGI (en la cual se montará). El segundo argumento (/usr/local/www/myapp.wsgi), corresponde con la ruta completa en la que se encuentra la aplicación en el servidor.

  • Debido al control de acceso de Apache, si la aplicación WSGI está fuera de los directorios configurados para ser accesibles por Apache, será necesario añadir el nuevo directorio como el siguiente:
<Directory /usr/local/www/wsgi-scripts>
Order allow,deny
Allow from all
</Directory>
  • En mi caso, la configuración de nuevos directorios, se encuentra en el directorio "sites-enabled", tal y como se especifica en el archivo de configuración de apache, apache2.conf:

[...]
# Include the virtual host configurations:
Include sites-enabled/
[...]

  • El directorio sites-enabled, se encuentra en el directorio de apache, en /etc/apache2/sites-enabled, y contiene enlaces simbólicos al directorio /etc/apache2/sites-available, donde se definen los sitios disponibles. En mi caso, he realizado una copia de seguridad del sitio "default" y le he modificado el código añadiendo el directorio:
<Directory /usr/local/www/wsgi-scripts>
Order allow,deny
Allow from all
</Directory>
  • Posteriormente, he reinciado apache con "sudo apachectl restart" y he comprobado que la aplicación funciona, entrando con el navegador a la url correspondiente.

http://ip_servidor/myapp

  • Esto me ha devuelto un apasionante mensaje de "Hello world!", confirmando la ejecución de la aplicación.

En la documentación para la configuración de mod_wsgi, se incluyen otros aspectos extra para la configuración. Me los apunto para próximas ocasiones, que ya es viernes, y no es cuestión de forzar. 🙂

Flickr! Foto por oskay