Como usar Django com uWSGI

uWSGI é um sevidor de container de aplicação feito em C puro, rápido, auto-ajustável e amigável a desenvolvedores e administradores de sistema.

Ver também

A documentação do uWSGI oferecem um tutorial cobrindo Django, nginx e uWSGI (uma possível implantaçao dentre muitas). A documentação abaixo foca em como integrar o Django com uWSGI.

Prerequisito: uWSGI

A wiki uWSGI descreve vários instalation procedures. Usando o pip, o gerenciador de pacotes do Python, é possível instalar o uWSGI com um único comando. Por exemplo:

# 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

Modelo uWSGI

uWSGI operates on a client-server model. Your web server (e.g., nginx, Apache) communicates with a django-uwsgi “worker” process to serve dynamic content.

Configurando e iniciando o servidor uWSGI para o Django

uWSGI fornece múltiplas maneiras de configurar o processo. Veja uWSGI’s configuration documentation e `examples`_.

Here’s an example command to start a uWSGI server:

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

Asume-se que tem um pacote do projeto no nível mais alto chamado mysite, e dentro deste um módulo mysite/wsgi.py que contém um objeto applicação WSGI. Este é o layout que terá se executar django-admin startproject mysite (usando so seu próprio nome de projeto do lugar do mysite) com a recente versão do Django. Se este arquivo não existe, é necessário criá-lo. Veja a documentação em Como implementar com WSGI para o conteúdo padrão que deve ser colocado neste arquivo e que você pode adicionar.

As opções específicas para o Django são:

  • chdir: O caminho do diretório necessário estar no Python path – isto é, o diretório que contém o pacote mysite.
  • module: O módulo WSGI a ser usado – provavelmente o módulo mysite.wsgi que o startproject cria.
  • env: Should probably contain at least DJANGO_SETTINGS_MODULE.
  • home: Optional path to your project virtual environment.

Example ini configuration file:

[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

Example ini configuration file usage:

uwsgi --ini uwsgi.ini

Arrumando o UnicodeEncodeError para uploads de arquivos

If you get a UnicodeEncodeError when uploading files with file names that contain non-ASCII characters, make sure uWSGI is configured to accept non-ASCII file names by adding this to your uwsgi.ini:

env = LANG=en_US.UTF-8

Veja a seção Files do guia de referência de unicode para detalhes.

Veja a documentação do uWSGI no managing the uWSGI process para informações sobre iniciar, parar e recarregar os uWSGI workers.

Back to Top