Por que usar o uWSGI? Porque atualmente é a opção mais performática e linda de fazer deloyment de projetos em Python, tanto faz se sua aplicação é escrita usando Django, Flask ou afins.
Levando em conta que você já tenha o nginx instalado, falarei apenas sobre a parte que envolve o uWSGI.
Primeiros passos:
Primeiro instale os headers da libxml2 e do python, no ubuntu por exemplo, digite apenas: sudo apt-get install libxml2-dev python-dev.
Com o PIP, instale o uWSGI: sudo pip install uWSGI. O PIP começará a compilar o uWSGI, caso você não tenha GCC, make, autoconf e etc, instale com sudo apt-get install build-essential.
Eu particularmente, escrevo as configurações para o uWSGI em arquivos INI, segue uma configuração que geralmente uso.
[uwsgi]
touch-reload=/diretorio/projeto/tmp/restart.txt # Usado para que o uWSGI recarrege o seu fonte com um simples touch restart.txt
listen=1024 # Número de itens em fila de espera
disable-logging=true # Deixa de logar requisições, fará log apenas de erros.
socket=/diretorio/que/voce/quiser.sock # Caminho do socket que o uWSGI ouvirá/escreverá.
master=true # Ativa o processo master para controlar os rebeldes.
harakiri=60 # Modo suicida que matará a app após x segundos em execução.
processes=4 # Número de workers.
buffer-size=25000 # Buffer mais alto porque muitas vezes alguns browsers mandam headers gigantes.
daemonize=/diretorio/que/voce/quiser.log # Joga o processo para background e escreve o log no arquivo determinado.
post-buffering=8192 # Limite máximo de tamanho do body do http, passando o limite, ele salva em disco.
pidfile=/diretorio/que/voce/quiser.pid # Arquivo que o número do processo master será gravado.
pythonpath=/diretorio/do/seu/projeto
module=wsgi # Módulo que o uWSGI carregará a sua app.
Com isso, sua app já deve funcionar com uwsgi --ini /arquivo/ini.ini.
Para fazer o deployment com o nginx, você precisa de duas linhas apenas.
No seu location / adicione:
include uwsgi_params;
uwsgi_pass unix:/diretorio/do/socket.sock;
Pronto, depolyment feito, não se esqueça de colocar o nginx para servir seus estáticos senão será um tiro no pé usar o uWSGI para isso.
- Wait!!! Como faz para fazer o uWSGI iniciar com a máquina?
- One word: upstart.
- Tá! Como?
- Mais fácil do que tirar doce de criança.
Crie um arquivo .conf em /etc/init com o seguinte conteúdo:
start on (net-device-up
and local-filesystems
and runlevel [2345])
stop on runlevel [016]
respawn
expect daemon
exec uwsgi --ini /seu/arquivo/de/config/uwsgi.ini
Para executar a app, digite start nome_do_arquivo sem o .conf é claro. Outros comandos são: stop, restart e status.
Pronto, espero que tenham gostado/achado útil, qualquer dúvida, comentem ou twittem para
@jaysonsantos.


Leia essa entrada em seu contexto
original »
Acredito que muitas pessoas já tiveram a necessidade de enfileirar o envio de e-mails para que o usuário não espere a boa vontade do servidor SMTP e afins. Para isso, desenvolvi um backend para envio de e-mails em Django que usa o Spooler do uWSGI para fazer a bendita fila.
Para quem não conhece o Spooler do uWSGI, a documentação completa pode ser consultada em http://projects.unbit.it/uwsgi/wiki/Spooler, e os lindos decorators, podem ser consultados em http://projects.unbit.it/uwsgi/wiki/Decorators.
Vamos ao que interessa.
Para instalar, pip install django-uwsgi-mail ou baixe o repositório em https://github.com/jaysonsantos/django-uwsgi-mail.
Para usá-lo, adicione o uwsgi_mail ao seu python path, e configure no seu settings o backend de e-mail com EMAIL_BACKEND = 'uwsgi_mail.uwsgi.EmailBackend', não esquecendo de ativar o spooler no seu uWSGI e fazer com que ele carrege o módulo uwsgi_mail.task.
- Que mais, tio?
- Nada, envie seus e-mails.
- Como assim?
- Com o backend adicionado, você pode usar tanto o send_mail ou EmailMessage normalmente que o backend irá serializar a mensagem e enviar para o uWSGI que enviará para o spool e o spool voltará ao uwsgi_mail.task.send_mail que usará por padrão o backend de SMTP do Django, caso você queria alterá-lo, no seu settings, configure UWSGI_EMAIL_BACKEND com o backend que você quiser.
É isso aí, façam fork do projeto, modifiquem, comentem.
Mais informaçõs em https://github.com/jaysonsantos/django-uwsgi-mail.


Leia essa entrada em seu contexto
original »