django deploy

Download Django Deploy

Post on 24-Jan-2016

9 views

Category:

Documents

0 download

Embed Size (px)

DESCRIPTION

django

TRANSCRIPT

  • DJANGO DEPLOYComo servir e distribuir apps Django em um ambiente

    de produo

    https://github.com/arturfelipe/django-deploy

  • Web framework python

    full stack

    DJANGO DEPLOY

    Baterias inclusasDesenvolvimento gil

  • E quanto ao deploy?

    DJANGO DEPLOY

    Como servir a minha aplicao em um ambiente externo?

    Pode usar? ./manage.py runserver

  • DJANGO DEPLOY

    Como fao ento?

  • DJANGO DEPLOY Servindo a aplicao

    Application ServerWSGI

    Web ServerHTTP

  • DJANGO DEPLOY Web Server (HTTP)

    Muito leve timo servidor de estticos (html,css,js,imgs) Cache Proxy reverso Redirects/Rewrites

  • DJANGO DEPLOY

    Mais leve No serve dinmico URI Based Interpretation (locations)

    Mais fcil de instalar e configurar

    X Mais pesado Serve dinmico File based interpretation

    Web Server (HTTP)

  • 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)

  • DJANGO DEPLOY Application Sever (WSGI)

    WSGI?Web Server Gateway Interface

    Especificao python que descreve a comunicao entre web server e web

    applications.

    PEP 333

  • DJANGO DEPLOY Application Sever (WSGI)

    mod_wsgi

  • DJANGO DEPLOY Application Sever (WSGI)

    Green Unicorn Compatvel com a maioria dos web frameworks Fcil de configurar Leve Rpido

  • DJANGO DEPLOY Application Sever (WSGI)

    pip install gunicorn gunicorn minha_app.wsgi:application --workers 2 -b 127.0.0.1:8000

  • DJANGO DEPLOY Gerenciadores de processo

    Como iniciar/parar a aplicao toda vez que eu fizer um deploy?

    No pode ser na mo n?

    E se processo cair?

    E se o servidor inteiro cair?

  • 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

  • DJANGO DEPLOY

    Upload do projeto Atualizao de dependncias (libs de terceiros) Coleta de estticos Rodar migrations de BD Restartar aplicao

    Processo de deploy

  • DJANGO DEPLOY

    /var/webapps/minha-app/

    Estrutura de arquivos

    logs confbin minha_app media static virtualenv

  • DJANGO DEPLOY

    /var/webapps/minha-app/

    Estrutura de arquivos

    logs confbin minha_app media static virtualenv

    Upload do projeto

    Atualizao de dependncias

    Coleta de estticos

  • DJANGO DEPLOY Estrutura de arquivos

    Taaaaah blzz!!!Vou precisar criar essa estrutura

    inicialmente na mo?

    E pra fazer o deploy toda vez que integrar algo no cdigo?

    Vai na mo tambm?

  • DJANGO DEPLOY Deploy

    Automatizao OrquestraoProvisionamento

    Infraestrutura como cdigo

  • DJANGO DEPLOY Deploy

    Ferramenta python para automatizao de deploy ou qualquer tarefa sysadmin utilizando SSH

    Simples Tarefas so definidas como funes python Command line Configurao de mltiplos hosts

  • 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))

  • 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

  • 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