---
title: "Déploiement de Django avec uWSGI"
version: 5.1
locale: fr
source: https://docs.djangoproject.com/fr/5.1/howto/deployment/wsgi/uwsgi/
canonical: https://djangodocs.dev/fr/5.1/howto/deployment/wsgi/uwsgi/
---
# Déploiement de Django avec uWSGI

[uWSGI](https://uwsgi-docs.readthedocs.io/) 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.

> **See also**
>
> La documentation de uWSGI fournit un [tutoriel](https://uwsgi.readthedocs.io/en/latest/tutorials/Django_and_nginx.html) 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](https://uwsgi-docs.readthedocs.io/en/latest/Install.html). 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 :

```console
# Install current stable version.
$ python -m pip install uwsgi

# Or install LTS (long term support).
$ python -m pip install https://projects.unbit.it/downloads/uwsgi-lts.tar.gz
```

### 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.

### Configuration et démarrage du serveur uWSGI pour Django

uWSGI accepte plusieurs façons de configurer le processus. Voir la [documentation de configuration](https://uwsgi.readthedocs.io/en/latest/Configuration.html) fournie par uWSGI.

Voici un exemple de commande pour lancer un serveur uWSGI :

```shell
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 virtual environment
    --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](/fr/5.1/howto/deployment/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 paquet `mysite`.
- `module`: le module WSGI à utiliser, probablement le module `mysite.wsgi` créé par la commande [`startproject`](/fr/5.1/ref/django-admin/#django-admin-startproject).
- `env`: doit probablement contenir au moins [`DJANGO_SETTINGS_MODULE`](/fr/5.1/topics/settings/#envvar-DJANGO_SETTINGS_MODULE).
- `home`: chemin facultatif vers l’environnement virtuel de votre projet.

Exemple de fichier de configuration .ini :

```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 :

```shell
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`:
>
> ```ini
> env = LANG=en_US.UTF-8
> ```
>
> Consultez la section [Fichiers](/fr/5.1/ref/unicode/#unicode-files) du guide de référence Unicode pour plus de détails.

Consultez la documentation de uWSGI sur la [gestion du processus uWSGI](https://uwsgi-docs.readthedocs.io/en/latest/Management.html) pour des informations sur le démarrage, l’arrêt et le rechargement des processus de travail uWSGI.
