Installation et configuration de Python uWSGI

Cet article présente principalement comment déployer des applications WSGI simples et des frameworks Web courants.

En prenant Ubuntu/Debian comme exemple, installez d'abord les paquets de dépendances :

apt-get install build-essential python-dev

Installer uWSGI avec Python

1. Via la commande pip :

pip install uwsgi

2. Téléchargez le script d'installation :

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

Installez le binaire uWSGI dans /tmp/uwsgi, vous pouvez le modifier.

3. Installation à partir du code source :

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

Une fois l'installation terminée, vous obtiendrez un fichier binaire uwsgi dans le répertoire courant.


La première application WSGI

Commençons par un simple "Hello World" en créant le fichier foobar.py avec le code suivant :

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

La fonction par défaut que le chargeur Python d'uWSGI rechercheraapplication 。

Ensuite, nous démarrons uWSGI pour exécuter un serveur HTTP, en déployant le programme sur le port HTTP 9090 :

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

Ajout de la concurrence et de la surveillance

Par défaut, uWSGI démarre un seul processus et un seul thread.

Vous pouvez utiliser l'--processesoption pour ajouter plus de processus, ou utiliser l'--threadsoption pour ajouter plus de threads, ou les deux en même temps.

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

La commande ci-dessus générera 4 processus, chacun avec 2 threads.

Si vous avez besoin d'effectuer des tâches de surveillance, vous pouvez utiliser le sous-système de statistiques. Le format des données de surveillance est JSON:

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

Nous pouvons installer uwsgitop (similaire à la commande top de Linux) pour visualiser les données de surveillance:

pip install uwsgitop

Utilisation avec des serveurs Web

Nous pouvons utiliser uWSGI avec le serveur Web Nginx pour obtenir des performances de concurrence plus élevées.

Une configuration nginx courante est la suivante:

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

Le code ci-dessus indique que les requêtes Web reçues par nginx sont transmises au service uWSGI sur le port 3031 pour traitement.

Maintenant, nous pouvons générer uWSGI pour utiliser le protocole uwsgi localement:

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

Si votre serveur Web utilise HTTP, vous devez alors indiquer à uWSGI d'utiliser le protocole http localement (ceci est différent de --http, qui crée son propre proxy):

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

Déployer Django

Django est le framework web Python le plus couramment utilisé. Supposons que le projet Django se trouve à /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

--chdirUtilisé pour spécifier le chemin du projet.

Nous pouvons mettre la commande ci-dessus dans un fichier de configuration 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

Ensuite, il vous suffit d'exécuter la commande suivante :

uwsgi yourfile.ini

Déployer Flask

Flask est un framework web Python populaire.

Créez le fichier myflaskapp.py avec le code suivant :

from flask import Flask

app = Flask(__name__)

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

Exécutez la commande suivante :

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