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`_.
Aqui um exemplo de um comando para iniciar um servior 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
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 pacotemysite
.module
: O módulo WSGI a ser usado – provavelmente o módulomysite.wsgi
que ostartproject
cria.env
: deve provavelmente conter pelo menos oDJANGO_SETTINGS_MODULE
.home
: Optional path to your project virtual environment.
Exemplo do arquivo ini de configuração:
[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:
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
:
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.