Déploiement de Django avec uWSGI¶
uWSGI est un serveur conteneur d’applications rapide, auto-réparateur et convivial à la fois pour les développeurs et les administrateurs ; il est codé en C pur.
Voir aussi
La documentation de uWSGI fournit un tutoriel abordant Django, nginx et uWSGI (une possibilité de déploiement parmi plusieurs). La documentation ci-dessous se concentre sur la façon d’intégrer Django avec uWSGI.
Prérequis : uWSGI¶
Le wiki d’uWSGI décrit plusieurs procédures d’installation. En utilisant pip, le gestionnaire de paquets Python, vous pouvez installer n’importe quelle version d’uWSGI à l’aide d’une seule commande. Par exemple :
# Install current stable version.
$ pip install uwsgi
# Or install LTS (long term support).
$ pip install https://projects.unbit.it/downloads/uwsgi-lts.tar.gz
Avertissement
Certaines distributions, y compris Debian et Ubuntu, fournissent une version ancienne de uWSGI qui ne se conforme pas à la spécification WSGI. Les versions plus anciennes que 1.2.6 n’appellent pas close
sur l’objet réponse après avoir traité une requête. Dans ces cas, le signal request_finished
n’est pas envoyé. Par conséquent, il se peut que des connexions de base de données et de serveurs memcache puissent être laissées ouvertes.
Le modèle uWSGI¶
uWSGI opère sur un modèle client-serveur. Votre serveur Web (par ex. nginx ou Apache) communique avec un processus de travail django-uwsgi pour servir le contenu dynamique. Consultez la documentation du moteur uWSGI pour plus de détails.
Configuration et démarrage du serveur uWSGI pour Django¶
uWSGI accepte plusieurs façons de configurer le processus. Voir la documentation de configuration et les exemples fournis par uWSGI.
Voici un exemple de commande pour lancer un serveur uWSGI :
uwsgi --chdir=/path/to/your/project \
--module=mysite.wsgi:application \
--env DJANGO_SETTINGS_MODULE=mysite.settings \
--master --pidfile=/tmp/project-master.pid \
--socket=127.0.0.1:49152 \ # can also be a file
--processes=5 \ # number of worker processes
--uid=1000 --gid=2000 \ # if root, uwsgi can drop privileges
--harakiri=20 \ # respawn processes taking more than 20 seconds
--max-requests=5000 \ # respawn processes after serving 5000 requests
--vacuum \ # clear environment on exit
--home=/path/to/virtual/env \ # optional path to a virtualenv
--daemonize=/var/log/uwsgi/yourproject.log # background the process
Cet exemple part du principe qu’un paquet de projet de premier niveau est nommé mysite
, dans lequel se trouve un module mysite/wsgi.py
contenant un objet WSGI application
. C’est la disposition obtenue en lançant la commande django-admin startproject mysite
(en remplaçant mysite
par votre propre nom de projet) avec toute version récente de Django. Si ce fichier n’existe pas, vous devrez le créer. Consultez la documentation de Comment déployer avec WSGI pour connaître le contenu par défaut à placer dans ce fichier et ce que vous pouvez aussi y ajouter en plus.
Les options spécifiques à Django sont :
chdir
: le chemin vers le répertoire qui doit se trouver dans le chemin d’importation Python, par exemple le répertoire contenant le paquetmysite
.module
: le module WSGI à utiliser, probablement le modulemysite.wsgi
créé par la commandestartproject
.env
: doit probablement contenir au moinshome
: chemin facultatif vers le virtualenv de votre projet.
Exemple de fichier de configuration .ini :
[uwsgi]
chdir=/path/to/your/project
module=mysite.wsgi:application
master=True
pidfile=/tmp/project-master.pid
vacuum=True
max-requests=5000
daemonize=/var/log/uwsgi/yourproject.log
Exemple d’utilisation de fichier de configuration .ini :
uwsgi --ini uwsgi.ini
Résolution des erreurs UnicodeEncodeError
pour les envois de fichiers
Si vous obtenez des erreurs UnicodeEncodeError
lors de l’envoi de fichiers contenant des caractères non ASCII dans leur nom, vérifiez que uWSGI est configuré pour accepter les noms de fichiers non ASCII en ajoutant ceci dans uwsgi.ini
:
env = LANG=en_US.UTF-8
Consultez la section Fichiers du guide de référence Unicode pour plus de détails.
Consultez la documentation de uWSGI sur la gestion du processus uWSGI pour des informations sur le démarrage, l’arrêt et le rechargement des processus de travail uWSGI.