---
title: "Como usar Django com uWSGI"
version: 1.10
locale: pt-br
source: https://docs.djangoproject.com/pt-br/1.10/howto/deployment/wsgi/uwsgi/
canonical: https://djangodocs.dev/pt-br/1.10/howto/deployment/wsgi/uwsgi/
---
# Como usar Django com uWSGI

[uWSGI](https://projects.unbit.it/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.

> **See also**
>
> A documentação do uWSGI oferecem um  [tutorial](https://uwsgi.readthedocs.io/en/latest/tutorials/Django_and_nginx.html) 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](https://uwsgi-docs.readthedocs.io/en/latest/Install.html). Usando o pip, o gerenciador de pacotes do Python, é possível instalar o uWSGI com um único comando. Por exemplo:

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

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

> **Warning**
>
> Algumas distribuições, incluindo o Debian e Ubuntu, trazem uma versão desatualizada do uWSGI que não está em conformidade com as especificação uWSGI. Versões anteriores a 1.2.6 não chamam o `close` do objeto response após tratar uma requisição. Nestes caso o [`request_finished`](/pt-br/1.10/ref/signals/#django.core.signals.request_finished) não é enviado. Isso pode resultar em conexões inativas com o banco de dados e servidores memcache.

### Modelo uWSGI

uWSGI opera no modelo cliente servidor. Seu servidor WEB (Ex: nginx, Apache) comunica com um processo ‘django-uwsgi’ “executor” para entregar conteúdo dinâmico. Veja uWSGI’s [documentação background](https://projects.unbit.it/uwsgi/wiki/Background) para mais detalhes.

### Configurando e iniciando o servidor uWSGI para o Django

uWSGI fornece múltiplas maneiras de configurar os processos. Veja uWSGI’s [configuration documentation](https://uwsgi.readthedocs.io/en/latest/Configuration.html) e [examples](https://projects.unbit.it/uwsgi/wiki/Example).

Aqui um exemplo de um comando para iniciar um servior uWSGI:

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

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](/pt-br/1.10/howto/deployment/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`](/pt-br/1.10/ref/django-admin/#django-admin-startproject) cria.
- `env`: deve provavelmente conter  pelo menos o `DJANGO_SETTINGS_MODULE`.
- `home`: caminho opcional para o virtualenv do projeto.

Exemplo do arquivo ini de configuração:

```bash
[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
```

Exemplo de uso do arquivo ini de configuração:

```bash
uwsgi --ini uwsgi.ini
```

> **Arrumando o UnicodeEncodeError para uploads de arquivos**
>
> Se receber um ```UnicodeEncodeError``quando fizer upload de arquivos com nomes que contenham caraceteres não ASCII, tenha certeza de configurar o uWSGI para aceitar nome de arquivos não ASCII adicionando isso ao seu ``uwsgi.ini```:
>
> ```bash
> env = LANG=en_US.UTF-8
> ```
>
> Veja a seção [Files](/pt-br/1.10/ref/unicode/#unicode-files) do guia de referência de unicode para detalhes.

Veja a documentação do uWSGI no [managing the uWSGI process](https://uwsgi-docs.readthedocs.io/en/latest/Management.html) para informações sobre iniciar, parar e recarregar os uWSGI workers.
