DJANGO DEPLOY
Como servir e distribuir apps Django em um ambiente
de produção
Artur Felipe de Sousa


Web framework python
full stack
DJANGO DEPLOY
Baterias inclusas
Desenvolvimento ágil
E quanto ao deploy?
DJANGO DEPLOY
Como servir a minha aplicação
em um ambiente externo?
Pode usar? 

./manage.py runserver
DJANGO DEPLOY
Como faço então?
DJANGO DEPLOY Servindo a aplicação
Application Server
WSGI
Web Server
HTTP
DJANGO DEPLOY Web Server (HTTP)
• Muito leve
• Ótimo servidor de estáticos (html,css,js,imgs)
• Cache
• Proxy reverso
• Re...
DJANGO DEPLOY
• Mais leve
• Não serve dinâmico
• URI Based Interpretation 

(locations)
•Mais fácil de instalar e 

configu...
DJANGO DEPLOY
nginx.conf (vitualhost)
upstream minha_app {
server 127.0.0.1:8001 fail_timeout=0;
}
server {
listen 80;
ser...
DJANGO DEPLOY Application Sever (WSGI)
WSGI?
Web Server Gateway Interface
Especificação python que descreve a
comunicação e...
DJANGO DEPLOY Application Sever (WSGI)
mod_wsgi
DJANGO DEPLOY Application Sever (WSGI)
•Green Unicorn
•Compatível com a maioria dos web frameworks
•Fácil de configurar
•Le...
DJANGO DEPLOY Application Sever (WSGI)
pip install gunicorn
gunicorn minha_app.wsgi:application --workers 2 -b 127.0.0.1:8...
DJANGO DEPLOY Gerenciadores de processo
Como iniciar/parar a aplicação toda vez que eu
fizer um deploy?
Não pode ser na mão...
DJANGO DEPLOY Gerenciadores de processo
Supervisord
Permite controlar processos em sistemas UNIX-like
supervisord.conf
[pr...
DJANGO DEPLOY
• Upload do projeto
• Atualização de dependências (libs de terceiros)
• Coleta de estáticos
• Rodar migratio...
DJANGO DEPLOY
/var/webapps/minha-app/
Estrutura de arquivos
logs
conf

bin
minha_app
media
static
virtualenv
DJANGO DEPLOY
/var/webapps/minha-app/
Estrutura de arquivos
logs
conf

bin
minha_app
media
static
virtualenv
Upload do pro...
DJANGO DEPLOY Estrutura de arquivos
Taaaaah blzz!!!
Vou precisar criar essa estrutura
inicialmente na mão?
E pra fazer o d...
DJANGO DEPLOY Deploy
Automatização OrquestraçãoProvisionamento
Infraestrutura como código
DJANGO DEPLOY Deploy
Ferramenta python para automatização de deploy ou
qualquer tarefa sysadmin utilizando SSH
• Simples
•...
DJANGO DEPLOY
fabfile.py
Deploy
# coding: utf-8
import datetime
from fabric.api import env, task, sudo, local, put, run, cd...
DJANGO DEPLOY Fontes
http://nginx.org/en/docs/
http://gunicorn.org/
http://supervisord.org/
http://www.fabfile.org/

http:/...
DJANGO DEPLOY
Obrigado!!!
Artur Felipe de Sousa
Software Developer - globo.com
Entretenimento


Como me encontrar

https:/...
Próximos SlideShares
Carregando em…5
×

Django deploy - Como servir aplicações Django em produção

754 visualizações

Publicada em

Demonstração de como servir apps Django em um ambiente de produção.

Publicada em: Software
0 comentários
4 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
754
No SlideShare
0
A partir de incorporações
0
Número de incorporações
7
Ações
Compartilhamentos
0
Downloads
19
Comentários
0
Gostaram
4
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Django deploy - Como servir aplicações Django em produção

  1. 1. DJANGO DEPLOY Como servir e distribuir apps Django em um ambiente de produção Artur Felipe de Sousa
  2. 2. 
 Web framework python full stack DJANGO DEPLOY Baterias inclusas Desenvolvimento ágil
  3. 3. E quanto ao deploy? DJANGO DEPLOY Como servir a minha aplicação em um ambiente externo? Pode usar? 
 ./manage.py runserver
  4. 4. DJANGO DEPLOY Como faço então?
  5. 5. DJANGO DEPLOY Servindo a aplicação Application Server WSGI Web Server HTTP
  6. 6. DJANGO DEPLOY Web Server (HTTP) • Muito leve • Ótimo servidor de estáticos (html,css,js,imgs) • Cache • Proxy reverso • Redirects/Rewrites
  7. 7. DJANGO DEPLOY • Mais leve • Não serve dinâmico • URI Based Interpretation 
 (locations) •Mais fácil de instalar e 
 configurar X • Mais pesado • Serve dinâmico • File based interpretation Web Server (HTTP)
  8. 8. DJANGO DEPLOY nginx.conf (vitualhost) upstream minha_app { server 127.0.0.1:8001 fail_timeout=0; } server { listen 80; server_name minha_app.com.br; access_log /var/webapps/minha-app/logs/nginx-access.log; error_log /var/webapps/minha-app/logs/nginx-error.log; location /static/ { alias /var/webapps/minha-app/static/; } location /media/ { alias /var/webapps/minha-app/media/; } location /robots.txt { alias /var/webapps/minha-app/files/robots.txt; } location / { try_files $uri @proxy_to_app; } location @proxy_to_app { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://minha_app; } } Web Server (HTTP)
  9. 9. DJANGO DEPLOY Application Sever (WSGI) WSGI? Web Server Gateway Interface Especificação python que descreve a comunicação entre web server e web applications. PEP 333
  10. 10. DJANGO DEPLOY Application Sever (WSGI) mod_wsgi
  11. 11. DJANGO DEPLOY Application Sever (WSGI) •Green Unicorn •Compatível com a maioria dos web frameworks •Fácil de configurar •Leve •Rápido
  12. 12. DJANGO DEPLOY Application Sever (WSGI) pip install gunicorn gunicorn minha_app.wsgi:application --workers 2 -b 127.0.0.1:8000
  13. 13. DJANGO DEPLOY Gerenciadores de processo Como iniciar/parar a aplicação toda vez que eu fizer um deploy? Não pode ser na mão né? E se processo cair? E se o servidor inteiro cair?
  14. 14. DJANGO DEPLOY Gerenciadores de processo Supervisord Permite controlar processos em sistemas UNIX-like supervisord.conf [program:minha_app] command=gunicorn minha_app.wsgi:application --workers 2 -b 127.0.0.1:8000 user=ubuntu stdout_logfile=/var/webapps/minha-app/logs/gunicorn.log stderr_logfile=/var/webapps/minha-app/logs/gunicorn_error.log environment=LANG="pt_BR.UTF-8",LC_ALL="pt_BR.UTF-8",LC_LANG="pt_BR.UTF-8" autostart=true autorestart=true
  15. 15. DJANGO DEPLOY • Upload do projeto • Atualização de dependências (libs de terceiros) • Coleta de estáticos • Rodar migrations de BD • Restartar aplicação Processo de deploy
  16. 16. DJANGO DEPLOY /var/webapps/minha-app/ Estrutura de arquivos logs conf
 bin minha_app media static virtualenv
  17. 17. DJANGO DEPLOY /var/webapps/minha-app/ Estrutura de arquivos logs conf
 bin minha_app media static virtualenv Upload do projeto Atualização de dependências Coleta de estáticos
  18. 18. DJANGO DEPLOY Estrutura de arquivos Taaaaah blzz!!! Vou precisar criar essa estrutura inicialmente na mão? E pra fazer o deploy toda vez que integrar algo no código? Vai na mão também?
  19. 19. DJANGO DEPLOY Deploy Automatização OrquestraçãoProvisionamento Infraestrutura como código
  20. 20. DJANGO DEPLOY Deploy Ferramenta python para automatização de deploy ou qualquer tarefa sysadmin utilizando SSH • Simples • Tarefas são definidas como funções python • Command line • Configuração de múltiplos hosts
  21. 21. DJANGO DEPLOY fabfile.py Deploy # coding: utf-8 import datetime from fabric.api import env, task, sudo, local, put, run, cd, prefix from fabric.colors import green from contextlib import contextmanager PROJECT_NAME = 'minha_app' APP_PATH = ‘/var/webapps/minha-app/’ @task def dev(): env.hosts = ['122.122.121.1212'] env.user = 'dev' @task def upload(): pgreen('Deploying project...') # Generate release release_name = datetime.now().trftime(‘%Y%m%d%H%M%S') local('rm -f /tmp/{}.tgz'.format(PROJECT_NAME)) local('git archive --format=tar --prefix={0}/ HEAD | gzip > /tmp/{0}.tgz'.format(PROJECT_NAME)) put('/tmp/{}.tgz'.format(PROJECT_NAME), '/tmp/') run('tar -C /tmp -zxf /tmp/{}.tgz'.format(PROJECT_NAME)) with cd(APP_PATH): sudo('mv /tmp/{} ./releases/{}'.format(PROJECT_NAME, release_name)) sudo('rm -f ./current') sudo('ln -s ./releases/{} ./current'.format(release_name))
  22. 22. DJANGO DEPLOY Fontes http://nginx.org/en/docs/ http://gunicorn.org/ http://supervisord.org/ http://www.fabfile.org/
 http://wsgi.readthedocs.org/en/latest/ https://www.digitalocean.com/community/tutorials/apache-vs- nginx-practical-considerations https://www.digitalocean.com/community/tutorials/how-to-set-up- uwsgi-and-nginx-to-serve-python-apps-on-ubuntu-14-04#definitions- and-concepts
  23. 23. DJANGO DEPLOY Obrigado!!! Artur Felipe de Sousa Software Developer - globo.com Entretenimento 
 Como me encontrar
 https://twitter.com/arturfsousa
 https://github.com/arturfelipe arturfelipe.sousa@gmail.com FIM https://github.com/arturfelipe/django-deploy

×