Django Deploy
-
Upload
laura-panzariello -
Category
Documents
-
view
40 -
download
0
description
Transcript of Django Deploy
![Page 1: Django Deploy](https://reader033.fdocumentos.com/reader033/viewer/2022050909/563db9ec550346aa9aa127d5/html5/thumbnails/1.jpg)
DJANGO DEPLOYComo servir e distribuir apps Django em um ambiente
de produção
https://github.com/arturfelipe/django-deploy
![Page 2: Django Deploy](https://reader033.fdocumentos.com/reader033/viewer/2022050909/563db9ec550346aa9aa127d5/html5/thumbnails/2.jpg)
Web framework python
full stack
DJANGO DEPLOY
Baterias inclusasDesenvolvimento ágil
![Page 3: Django Deploy](https://reader033.fdocumentos.com/reader033/viewer/2022050909/563db9ec550346aa9aa127d5/html5/thumbnails/3.jpg)
E quanto ao deploy?
DJANGO DEPLOY
Como servir a minha aplicação em um ambiente externo?
Pode usar? ./manage.py runserver
![Page 4: Django Deploy](https://reader033.fdocumentos.com/reader033/viewer/2022050909/563db9ec550346aa9aa127d5/html5/thumbnails/4.jpg)
DJANGO DEPLOY
Como faço então?
![Page 5: Django Deploy](https://reader033.fdocumentos.com/reader033/viewer/2022050909/563db9ec550346aa9aa127d5/html5/thumbnails/5.jpg)
DJANGO DEPLOY Servindo a aplicação
Application ServerWSGI
Web ServerHTTP
![Page 6: Django Deploy](https://reader033.fdocumentos.com/reader033/viewer/2022050909/563db9ec550346aa9aa127d5/html5/thumbnails/6.jpg)
DJANGO DEPLOY Web Server (HTTP)
• Muito leve • Ótimo servidor de estáticos (html,css,js,imgs) • Cache • Proxy reverso • Redirects/Rewrites
![Page 7: Django Deploy](https://reader033.fdocumentos.com/reader033/viewer/2022050909/563db9ec550346aa9aa127d5/html5/thumbnails/7.jpg)
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)
![Page 8: Django Deploy](https://reader033.fdocumentos.com/reader033/viewer/2022050909/563db9ec550346aa9aa127d5/html5/thumbnails/8.jpg)
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)
![Page 9: Django Deploy](https://reader033.fdocumentos.com/reader033/viewer/2022050909/563db9ec550346aa9aa127d5/html5/thumbnails/9.jpg)
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
![Page 10: Django Deploy](https://reader033.fdocumentos.com/reader033/viewer/2022050909/563db9ec550346aa9aa127d5/html5/thumbnails/10.jpg)
DJANGO DEPLOY Application Sever (WSGI)
mod_wsgi
![Page 11: Django Deploy](https://reader033.fdocumentos.com/reader033/viewer/2022050909/563db9ec550346aa9aa127d5/html5/thumbnails/11.jpg)
DJANGO DEPLOY Application Sever (WSGI)
•Green Unicorn •Compatível com a maioria dos web frameworks •Fácil de configurar •Leve •Rápido
![Page 12: Django Deploy](https://reader033.fdocumentos.com/reader033/viewer/2022050909/563db9ec550346aa9aa127d5/html5/thumbnails/12.jpg)
DJANGO DEPLOY Application Sever (WSGI)
pip install gunicorn gunicorn minha_app.wsgi:application --workers 2 -b 127.0.0.1:8000
![Page 13: Django Deploy](https://reader033.fdocumentos.com/reader033/viewer/2022050909/563db9ec550346aa9aa127d5/html5/thumbnails/13.jpg)
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?
![Page 14: Django Deploy](https://reader033.fdocumentos.com/reader033/viewer/2022050909/563db9ec550346aa9aa127d5/html5/thumbnails/14.jpg)
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
![Page 15: Django Deploy](https://reader033.fdocumentos.com/reader033/viewer/2022050909/563db9ec550346aa9aa127d5/html5/thumbnails/15.jpg)
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
![Page 16: Django Deploy](https://reader033.fdocumentos.com/reader033/viewer/2022050909/563db9ec550346aa9aa127d5/html5/thumbnails/16.jpg)
DJANGO DEPLOY
/var/webapps/minha-app/
Estrutura de arquivos
logs confbin minha_app media static virtualenv
![Page 17: Django Deploy](https://reader033.fdocumentos.com/reader033/viewer/2022050909/563db9ec550346aa9aa127d5/html5/thumbnails/17.jpg)
DJANGO DEPLOY
/var/webapps/minha-app/
Estrutura de arquivos
logs confbin minha_app media static virtualenv
Upload do projeto
Atualização de dependências
Coleta de estáticos
![Page 18: Django Deploy](https://reader033.fdocumentos.com/reader033/viewer/2022050909/563db9ec550346aa9aa127d5/html5/thumbnails/18.jpg)
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?
![Page 19: Django Deploy](https://reader033.fdocumentos.com/reader033/viewer/2022050909/563db9ec550346aa9aa127d5/html5/thumbnails/19.jpg)
DJANGO DEPLOY Deploy
Automatização OrquestraçãoProvisionamento
Infraestrutura como código
![Page 20: Django Deploy](https://reader033.fdocumentos.com/reader033/viewer/2022050909/563db9ec550346aa9aa127d5/html5/thumbnails/20.jpg)
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
![Page 21: Django Deploy](https://reader033.fdocumentos.com/reader033/viewer/2022050909/563db9ec550346aa9aa127d5/html5/thumbnails/21.jpg)
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))
![Page 22: Django Deploy](https://reader033.fdocumentos.com/reader033/viewer/2022050909/563db9ec550346aa9aa127d5/html5/thumbnails/22.jpg)
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
![Page 23: Django Deploy](https://reader033.fdocumentos.com/reader033/viewer/2022050909/563db9ec550346aa9aa127d5/html5/thumbnails/23.jpg)
DJANGO DEPLOY
Obrigado!!!Artur Felipe de Sousa Software Developer - globo.com Entretenimento Como me encontrar https://twitter.com/arturfsousa https://github.com/arturfelipe [email protected]
FIM