APLICACIONES WSGI
Al desarrollar una aplicación PYTHON 3 según el estandar Web Server Gateway Interface, o por sus siglas WSGI, podremos servir pàginas web a travès del protocolo HTTP. Por tanto, debemos evaluar un servidor WSGI HTTP con el que responderemos a los clientes.
Cuando escribimos un programa WSGI podrá ejecutarse en un servidor WEB como APACHE ( con mod_wsgi ) o NGINX, este último se suele utilizar como un PROXY INVERSO complementando a un servidor de aplicaciones, incluso puede complementar como PROXY INVERSO a una configuración con APACHE y mod_wsgi. Un PROXY INVERSO es un intermediario que nos permite reservar nuestros servidores de aplicaciones de los ataques de usuarios o también podríamos configurarlo con caché para acelerar el tiempo de respuesta.
SERVIDORES DE APLICACIONES
Aunque habitualmente instalo mis aplicaciones en un servidor APACHE con mod_wsgi y NGINX, existe mucha documentación que explica cómo realizarlo.
Por esta vez, voy a mostrar unos ejemplos de implementación de una aplicación WSGI en tres servidores de aplicaciones como : Green Unicorn o GUNICORN, UWSGI y CHERRYPY
Para instalar GUNICORN :
$ pip install gunicorn
Creamos una sencilla aplicación WSGI que denominamos 'wsgi.py' y que nos servirá para todos los ejemplos :
#!/usr/bin/env python
# -*- coding: utf-8 -*-
def application(env, start_response):
data = b"Hello, World!\n"
start_response('200 OK', [('Content-Type', 'text/html')])
return [data]
Ya podemos mostrar el resultado en el puerto 80 cuando ejecutamos :
$ gunicorn -b 0.0.0.0:80 -w 4 wsgi
GUNICORN tiene una extensa cantidad de parámetros pero los que he usado en esta ejecución -b nos permite indicarle IP y PUERTO donde servir las páginas y -w le indica el número de procesos que deberá arrancar y al final solo le indicamos el nombre de la aplicación ('wsgi').
También es posible ejecutar el mismo servidor en segundo plano con :
$ gunicorn -b 0.0.0.0:80 -w 4 wsgi &
Para su instalación :
$ pip install uwsgi
Ahora volvemos a mostrar el resultado de ejecutar en anterior programa wsgi.py
$ uwsgi --http :80 --wsgi-file wsgi.py
Le hemos indicado que muestre el resultado en el puerto 80.
También es posible ejecutar el mismo servidor en segundo plano con :
$ uwsgi --http :80 --wsgi-file wsgi.py &
![](https://cherrypy.org/images/cherrypy.png)
Para realizar su instalación :
$ pip install cherrypy
Como en los casos anteriores vamos a mostrar el resultado que nos devuelve wsgi.py, pero ahora necesitamos crear un pequeño programa PYTHON donde podremos implementar todos los parámetros necesarios, este programa lo vamos a denominar 'server.py' :
# Import your application as:
# from wsgi import application
# Example:
from wsgi import application
# Import CherryPy
import cherrypy
if __name__ == '__main__':
# Mount the application
cherrypy.tree.graft(application, "/")
# Unsubscribe the default server
cherrypy.server.unsubscribe()
# Instantiate a new server object
server = cherrypy._cpserver.Server()
# Configure the server object
server.socket_host = "0.0.0.0"
server.socket_port = 80
server.thread_pool = 30
# For SSL Support
# server.ssl_module = 'pyopenssl'
# server.ssl_certificate = 'ssl/certificate.crt'
# server.ssl_private_key = 'ssl/private.key'
# server.ssl_certificate_chain = 'ssl/bundle.crt'
# Subscribe this server
server.subscribe()
# Example for a 2nd server (same steps as above):
# Remember to use a different port
# server2 = cherrypy._cpserver.Server()
# server2.socket_host = "0.0.0.0"
# server2.socket_port = 8080
# server2.thread_pool = 30
# server2.subscribe()
# Start the server engine (Option 1 *and* 2)
cherrypy.engine.start()
cherrypy.engine.block()
Mostramos el resultado de ejecutar wsgi.py con :
$ python server.py
ó para ejecutarlo en segundo plano :
$ python server.py &
Puede observar que en server.py existen opciones comentadas para demostrar otras capacidades que puede obtener de CHERRYPY, en este caso volvemos a mostrar el contenido en el puerto 80.
Esta ha sido una sencilla y eficaz introducción a tres de los servidores de aplicaciones compatibles con el estándar WSGI que considero más importantes y si necesita realizar un despliegue en producción puede utilizar NGINX como PROXY INVERSO y obtener los mejores resultados.
No hay comentarios:
Publicar un comentario