# Documentation Django 3.1.9.dev

# 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.
    $ 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 fournie 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 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 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`.
- `env`: doit probablement contenir au moins `DJANGO_SETTINGS_MODULE`.
- `home`: chemin facultatif vers l’environnement virtuel 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.