Instalación y configuración de Python uWSGI

Este artículo explica principalmente cómo desplegar aplicaciones WSGI simples y frameworks web comunes.

Tomando como ejemplo Ubuntu/Debian, primero instale los paquetes de dependencia:

apt-get install build-essential python-dev

Instalación de uWSGI para Python

1. A través del comando pip:

pip install uwsgi

2. Descargar el script de instalación:

curl http://uwsgi.it/install | bash -s default /tmp/uwsgi

Instale el binario de uWSGI en /tmp/uwsgi; puede modificarlo.

3. Instalación desde el código fuente:

wget http://projects.unbit.it/downloads/uwsgi-latest.tar.gz
tar zxvf uwsgi-latest.tar.gz
cd uwsgi-latest
make

Una vez completada la instalación, obtendrá un archivo binario uwsgi en el directorio actual.


La primera aplicación WSGI

Empecemos con un sencillo 'Hello World'; cree el archivo foobar.py, el código es el siguiente:

def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"]

La función predeterminada que buscará el cargador Python de uWSGIapplication 。

A continuación, inicie uWSGI para ejecutar un servidor HTTP y despliegue el programa en el puerto HTTP 9090:

uwsgi --http :9090 --wsgi-file foobar.py

Agregar concurrencia y monitoreo

De forma predeterminada, uWSGI inicia un solo proceso y un solo hilo.

Puede usar--processesla opción para agregar más procesos, o usar--threadsla opción para agregar más hilos, y también puede usar ambos al mismo tiempo.

uwsgi --http :9090 --wsgi-file foobar.py --master --processes 4 --threads 2

El comando anterior generará 4 procesos, cada uno con 2 hilos.

Si desea realizar tareas de monitoreo, puede usar el subsistema stats; el formato de datos de monitoreo es JSON:

uwsgi --http :9090 --wsgi-file foobar.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191

Podemos instalar uwsgitop (similar al comando top de Linux) para ver los datos de monitoreo:

pip install uwsgitop

Uso junto con un servidor web

Podemos combinar uWSGI con el servidor web Nginx para lograr un mayor rendimiento de concurrencia.

Una configuración común de nginx es la siguiente:

location / {
    include uwsgi_params;
    uwsgi_pass 127.0.0.1:3031;
}

El código anterior significa que las solicitudes web recibidas por nginx se pasan al servicio uWSGI en el puerto 3031 para su procesamiento.

Ahora, podemos generar uWSGI para usar localmente el protocolo uwsgi:

uwsgi --socket 127.0.0.1:3031 --wsgi-file foobar.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191

Si su servidor web utiliza HTTP, entonces debe indicar a uWSGI que use el protocolo http localmente (esto es diferente de –http, que generará un proxy por sí mismo):

uwsgi --http-socket 127.0.0.1:3031 --wsgi-file foobar.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191

Desplegar Django

Django es el framework web de Python más utilizado; supongamos que el proyecto Django está ubicado en /home/foobar/myproject:

uwsgi --socket 127.0.0.1:3031 --chdir /home/foobar/myproject/ --wsgi-file myproject/wsgi.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191

--chdirSe utiliza para especificar la ruta del proyecto.

Podemos convertir el comando anterior en un archivo de configuración yourfile.ini:

[uwsgi]
socket = 127.0.0.1:3031
chdir = /home/foobar/myproject/
wsgi-file = myproject/wsgi.py
processes = 4
threads = 2
stats = 127.0.0.1:9191

A continuación, solo necesita ejecutar el siguiente comando:

uwsgi yourfile.ini

Desplegar Flask

Flask es un popular framework web de Python.

Cree el archivo myflaskapp.py, el código es el siguiente:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    return "<span style='color:red'>I am app 1</span>"

Ejecute el siguiente comando:

uwsgi --socket 127.0.0.1:3031 --wsgi-file myflaskapp.py --callable app --processes 4 --threads 2 --stats 127.0.0.1:9191
Otras extensiones