SlideShare una empresa de Scribd logo
1 de 43
Buildout: crear y desplegar 
entornos reproducibles en 
Internet Solutions 
www.codesyntax.com 
Azitain industrialdea, 3-K 
E-20600 Eibar 
Tel.: +34 943821780 
Python 
Aitzol Naberan - @aitzol 
PyconEs – Zaragoza - 09-10-2014
¿Quienes somos?
¿Qué hacemos? 
Web!
Bien, vale, pero.. 
● Sitios de noticias colaborativos 
● Sitios para comunidades 
● Portales corporativos e intranets 
● Sitios multilingües 
● I + D
¿Como lo hacemos?
De donde venimos 
Allá por el 2001...
Zope 
● Definición oficial: Servidor de aplicaciones 
web orientada a objetos, gratuita, open-source, 
escrita en Python 
● Podemos resumirlo como una manera de 
publicar objetos python en un entorno 
web. 
● Originalmente desarrollado para 
mejorar/reemplazar la programación CGI
Zope 
● Introdujo el concepto de base de datos 
orientada a objectos (ZODB) en el 2001 
● Programación through-the-web(en el 
navegador), pero no se lo digáis a nadie 
● Versión restringida del interprete de 
python por razones de seguridad 
● DTML y ZPT como lenguaje de plantillas
Zope .../2.5/2.6 
● Un fichero tar 
● Las primeras versiones incluían su propio 
interprete python (2.1) 
● El desarrollo se hacía mediante 
“Products”:carpetas con un __init__.py y 
algo de código de inicialización 
● Desplegar el desarrollo en una carpeta y 
reiniciar
Zope 2.7/2.8/2.9 
● Desde un único fichero -> instalación 
● ./configure && make && make install 
● Python del sistema/custom 
● Zope instance: una instalación, N 
instancias 
● Instancias ZEO para desacoplar la base 
de datos
Pero.... necesitábamos más
Plone es un CMS 
● Simple y potente 
● Flexibilidad en el flujo de publicación 
● Seguridad granular (users, groups, roles, 
permissions) 
● Extensible 
● Usabilidad
Pero la instalación... 
● Plone 1.x, 2.0, 2.1, 2.5, 3.0, 3.1: 
● Tarball Zope 2.6, 2.7, → 2.8, 2.9 and 2.10 
● Plone 3 (2007) and 3.1 (2008): 
● Zope → Zope 3: small reusable components 
● Plone 3.2 (2009): 
● Tarball → eggs 
● Everyone started developing “python eggs” for 
Plone
Instalación compleja 
● Con la nueva distribución de eggs, la 
instalación ya no es descomprimir un tar 
● Setup.py instala muchos eggs: 
● Plone 3.x: +150 
● Plone 4.x: +250 
● Cabe la posibilidad de tener instalaciones 
complejas
Arquitectura Plone 
Apache/Nginx 
:80 
Zope (w Plone) 
:8080 
ZEO (w ZODB) 
:8081
Arquitectura Plone 
Apache/Nginx 
:80 
Zope (w Plone) 
:8082 
ZEO (w ZODB) 
:8084 
Zope (w Plone) 
:8081 
Zope (w Plone) 
:8083
Arquitectura Plone 
Apache/Nginx 
:80 
Zope (w Plone) 
:8082 
ZEO (w ZODB) 
:8084 
Zope (w Plone) 
:8081 
Zope (w Plone) 
:8083 
SERVER 1 SERVER 2 SERVER 3
Necesidades 
● Despliegue sencillo (2-3 comandos) 
● Reproducible: 
● Necesitamos ejecutar el procedimiento 
bastantes veces (cada vez que añadimos un 
nuevo egg) 
● Necesitamos ejecutarlo en múltiples 
servidores (propio ,desarrollo , 
producción, ...)
Buildout 
● Jim Fulton (creador de Zope), crea 
zc.buildout 
● Para solventar 2 problemas: 
● Application-centric assembly and deployment 
● Repeatable assembly of programs from 
python eggs
¿Cómo lo soluciona buildout? 
● Fichero de configuración en formato ini 
(buildout.cfg) 
● Ejecución ordenada de partes (parts) 
● Cada parte ejecuta una “receta”: 
● Una receta es un huevo python especializado 
en una tarea (filosofía unix) 
● Y ya
Ejemplo (mínimo) 
[buildout] 
parts = 
installation 
[installation] 
recipe = zc.recipe.egg 
eggs = feedparser 
interpreter = custompy 
Crea un interprete python (llamado custompy) con feedparser en el 
path
Ejemplo: Plone 
[buildout] 
extensions = 
mr.developer 
show­picked­versions 
= true 
parts = 
instance 
zeo 
omelette 
zopepy 
extends = 
http://dist.plone.org/release/4.3.3/versions.cfg 
(show plonebuildout.cfg)
Basado en http://xkcd.com/303
Entornos reproducibles 
● Conviene fijar las versiones exactas de 
todo lo que se usa 
● Defines que te descargas desde donde 
● La estructura del sistema de ficheros es 
siempre la misma 
● Si todas las versiones se fijan 
correctamente, siempre se obtiene la 
misma instalación
¿Como desarrollamos? 
● No tienen porque tener versión: 
● Podemos cambiar de las versiones fijadas a 
checkouts (svn, git, hg, …) en el sistema de 
ficheros utilizando una extensión: 
mr.developer 
● Las extensiones son similares a las recetas 
● Activar/desactivar eggs en desarrollo
Y en eso llegó Django 
● Definición: high-level python web 
framework that encourages rapid 
development and clean, pragmatic 
desing. 
● Normalmente se utiliza para desarrollar 
soluciones rápidamente contra storage 
SQL
P: ¿Y usáis eso con Django? 
● R:Si ! 
● P: ¿Por qué? 
● R: Esencialmente porque llegamos a 
Django después de Plone, y ya 
conocíamos como funcionaba. De esta 
manera utilizamos una única herramienta 
para todos nuestros despliegues
P: ya pero... 
● R: ¿no os he convencido?... 
● Un único sistema de despliegue es preferible 
a dos.
Ejemplo: Django 
[buildout] 
parts = 
django 
staticfiles 
cron 
(show djangobuildout.cfg)
Extender buildout 
● Las partes se pueden extender desde otros 
ficheros o mediante opciones (OOP 
concept) 
● Se puede extender over-the-net (extends= 
http://myserver/buildout.cfg) 
● Known Good Set of eggs for proper 
installation 
● Crear tu propia receta
¿Qué hacen las recetas? 
● Plone: 
● Crean una instancia de Zope y ponen todos 
los eggs en el path 
● Configurar puertos, base de datos, blob files, 
tamaños de cache... 
● Crear instancias de ZEO para desacoplar la 
base de datos (configurar puertos, paths, 
etc)
¿Qué hacen las recetas? 
● Django: 
● Crea un intérprete con django instalado en el 
path (wrapper de python manage.py) 
● Ejecución de collect static 
● Crea el script WSGI
¿Qué hacen las recetas? 
● General: 
● Ficheros de configuración para Nginx/Apache 
(basado en plantillas) 
● Descarga paquetes de SCV (svn/git/hg) 
● Descargar tarballs 
● Crear tareas cron 
● Instalar y configurar supervisord
¿Qué hacen las recetas? 
● General: 
● Configurar balanceadores (pound/haproxy) 
● Actualizar ficheros po y subirlos a Google 
Docs para su traducción. 
● Crear links a los huevos activos instalados 
para poder encontrarlos fácilmente 
(omellete) 
● ...
Ejemplo reales 
● +120 proyectos con buildout en nuestros 
servidores 
● Todos los desarrolladores conocen como 
usarlo: 
● ./bin/buildout -vv 
● Es predecible
Ejemplo: www.bertsozale.com 
NGINX :80 
(system package) VARNISH :8081 HAPROXY :8082 
ZOPE :8083 ZOPE :8083 ZOPE :8083 
ZEO :8084 All in one server
Ejemplo: EEA 
APACHE 
:80 
POUND 
:8080 
ZEO :8080 
ZOPE 
:8081 
ZOPE 
:8082 
ZOPE 
:8083 
ZOPE 
:8084 
ZOPE 
:8081 
SERVER 2 
ZOPE 
:8082 
ZOPE 
:8083 
ZOPE 
:8084 
ZOPE 
:8081 
SERVER 3 
ZOPE 
:8082 
ZOPE 
:8083 
ZOPE 
SERVER 1 :8084 
SERVER 4 
SERVER 5
Ejemplo: EEA 
● 4 servidores, todo configurado con un 
único fichero buildout. 
● https://github.com/eea/esdrt.buildout 
● Los sysadmin de EEA Sysadmins adoran la 
configuración con buildout 
● Repetible 
● No necesitan permisos de root para la 
instalación
The next cool thing (tm) 
● Cada día aparecen nuevas herramientas para la 
automatización de despliegues 
● Fabric, Docker, … 
● La inclusión de nuevas herramientas en el equipo puede 
llegar a ser muy costosa 
● ¿Que hacer? 
● El uso de buildout no excluye el uso de fabric (por ejemplo). 
● ¿Fichero fab sencillo? → úsalo 
● ¿muchas lineas de despliegue? → prueba buildout
Buildout & fabric 
● Fabric también se usa para la automatización y 
despliegue de entornos 
● El uso de buildout no excluye el uso de fabric 
(¿he comentado esto?) 
● Ej: usar fabric para actualizar y ejecutar 
buildout: 
● Actualizar el fichero buildout.cfg desde SCV 
● Ejecuta budout -vv 
● Reinicia servicios
Buildout & fabric 
● Algunos proyectos de la EEA lo usan 
● Nosotros no, ssh + run buildout 
● Experiencias: 
● http://tinyurl.com/fab-buildout 
● http://tinyurl.com/fab-buildout-so
Resumiendo 
● Configura y despliega tanto proyectos 
simples como complejos 
● Repetible la instalación → siempre es igual 
en distintos entornos 
● Pensado sobre todo para aplicaciones 
python(Plone, Zope, Django, Pyramid), 
pero es posible usarlo para otras cosas: 
Apache, Pound, HAProxy, Memcached, …
¿Preguntas?

Más contenido relacionado

La actualidad más candente

Vagrant para automatizar entornos DEV/PRO: VirtualBox y vSphere
Vagrant para automatizar entornos DEV/PRO: VirtualBox y vSphereVagrant para automatizar entornos DEV/PRO: VirtualBox y vSphere
Vagrant para automatizar entornos DEV/PRO: VirtualBox y vSphereJavier Jerónimo Suárez
 
Introducción a Vagrant
Introducción a VagrantIntroducción a Vagrant
Introducción a VagrantRaúl Uranga
 
Entorno de desarrollo rápido con Vagrant
Entorno de desarrollo rápido con VagrantEntorno de desarrollo rápido con Vagrant
Entorno de desarrollo rápido con VagrantPau Ferrer Ocaña
 
97132962-instalacion-de-open meetings-en-squeeze
 97132962-instalacion-de-open meetings-en-squeeze 97132962-instalacion-de-open meetings-en-squeeze
97132962-instalacion-de-open meetings-en-squeezexavazquez
 
Entornos de desarrollo para symfony2 con vagrant y puppet
Entornos de desarrollo para symfony2 con vagrant y puppetEntornos de desarrollo para symfony2 con vagrant y puppet
Entornos de desarrollo para symfony2 con vagrant y puppetVicent Soria Durá
 
Creación de entornos de desarrollo con Vagrant
Creación de entornos de desarrollo con VagrantCreación de entornos de desarrollo con Vagrant
Creación de entornos de desarrollo con VagrantCarlos Gimeno Yáñez
 
Instalar siberian cms (hestia cp) en aws
Instalar siberian cms (hestia cp) en awsInstalar siberian cms (hestia cp) en aws
Instalar siberian cms (hestia cp) en awsMizaelMartinez2
 
Programación web framework djando - noviembre de 2014
Programación web   framework djando - noviembre de 2014Programación web   framework djando - noviembre de 2014
Programación web framework djando - noviembre de 2014SandraMartinezG
 
MythTV Mediacenter on an IGEPv2
MythTV Mediacenter on an IGEPv2 MythTV Mediacenter on an IGEPv2
MythTV Mediacenter on an IGEPv2 marcoita
 
IdeaSpaceVR: como crear tu plataforma de realidad virtual
IdeaSpaceVR: como crear tu plataforma de realidad virtualIdeaSpaceVR: como crear tu plataforma de realidad virtual
IdeaSpaceVR: como crear tu plataforma de realidad virtualMizaelMartinez2
 
Descarga de documentos de zip en ges
Descarga de documentos de zip en gesDescarga de documentos de zip en ges
Descarga de documentos de zip en gesjruizges
 
zc.buildout para desarrolladores Plone
zc.buildout para desarrolladores Plonezc.buildout para desarrolladores Plone
zc.buildout para desarrolladores PloneRoberto Allende
 
Inf tec estandariza_comp_escrit
Inf tec estandariza_comp_escritInf tec estandariza_comp_escrit
Inf tec estandariza_comp_escritClemente MR
 
04 taller-django
04 taller-django04 taller-django
04 taller-djangosamerscd
 
Instalacion pingüino
Instalacion pingüinoInstalacion pingüino
Instalacion pingüinoberthin
 
Install apps in ubuntu
Install apps in ubuntuInstall apps in ubuntu
Install apps in ubuntuJuan Vladimir
 
Git y Jenkins. El futuro en la gestión del ciclo de vida de aplicaciones
Git y Jenkins. El futuro en la gestión del ciclo de vida de aplicacionesGit y Jenkins. El futuro en la gestión del ciclo de vida de aplicaciones
Git y Jenkins. El futuro en la gestión del ciclo de vida de aplicacionesParadigma Digital
 

La actualidad más candente (20)

Vagrant para automatizar entornos DEV/PRO: VirtualBox y vSphere
Vagrant para automatizar entornos DEV/PRO: VirtualBox y vSphereVagrant para automatizar entornos DEV/PRO: VirtualBox y vSphere
Vagrant para automatizar entornos DEV/PRO: VirtualBox y vSphere
 
Introducción a Vagrant
Introducción a VagrantIntroducción a Vagrant
Introducción a Vagrant
 
Entorno de desarrollo rápido con Vagrant
Entorno de desarrollo rápido con VagrantEntorno de desarrollo rápido con Vagrant
Entorno de desarrollo rápido con Vagrant
 
97132962-instalacion-de-open meetings-en-squeeze
 97132962-instalacion-de-open meetings-en-squeeze 97132962-instalacion-de-open meetings-en-squeeze
97132962-instalacion-de-open meetings-en-squeeze
 
Entornos de desarrollo para symfony2 con vagrant y puppet
Entornos de desarrollo para symfony2 con vagrant y puppetEntornos de desarrollo para symfony2 con vagrant y puppet
Entornos de desarrollo para symfony2 con vagrant y puppet
 
Creación de entornos de desarrollo con Vagrant
Creación de entornos de desarrollo con VagrantCreación de entornos de desarrollo con Vagrant
Creación de entornos de desarrollo con Vagrant
 
Ubuntu kubuntu
Ubuntu kubuntuUbuntu kubuntu
Ubuntu kubuntu
 
Instalar siberian cms (hestia cp) en aws
Instalar siberian cms (hestia cp) en awsInstalar siberian cms (hestia cp) en aws
Instalar siberian cms (hestia cp) en aws
 
Programación web framework djando - noviembre de 2014
Programación web   framework djando - noviembre de 2014Programación web   framework djando - noviembre de 2014
Programación web framework djando - noviembre de 2014
 
Despues de instalar fedora 14
Despues de instalar fedora 14Despues de instalar fedora 14
Despues de instalar fedora 14
 
MythTV Mediacenter on an IGEPv2
MythTV Mediacenter on an IGEPv2 MythTV Mediacenter on an IGEPv2
MythTV Mediacenter on an IGEPv2
 
IdeaSpaceVR: como crear tu plataforma de realidad virtual
IdeaSpaceVR: como crear tu plataforma de realidad virtualIdeaSpaceVR: como crear tu plataforma de realidad virtual
IdeaSpaceVR: como crear tu plataforma de realidad virtual
 
Descarga de documentos de zip en ges
Descarga de documentos de zip en gesDescarga de documentos de zip en ges
Descarga de documentos de zip en ges
 
zc.buildout para desarrolladores Plone
zc.buildout para desarrolladores Plonezc.buildout para desarrolladores Plone
zc.buildout para desarrolladores Plone
 
Inf tec estandariza_comp_escrit
Inf tec estandariza_comp_escritInf tec estandariza_comp_escrit
Inf tec estandariza_comp_escrit
 
04 taller-django
04 taller-django04 taller-django
04 taller-django
 
Instalacion pingüino
Instalacion pingüinoInstalacion pingüino
Instalacion pingüino
 
Manual express de git
Manual express de gitManual express de git
Manual express de git
 
Install apps in ubuntu
Install apps in ubuntuInstall apps in ubuntu
Install apps in ubuntu
 
Git y Jenkins. El futuro en la gestión del ciclo de vida de aplicaciones
Git y Jenkins. El futuro en la gestión del ciclo de vida de aplicacionesGit y Jenkins. El futuro en la gestión del ciclo de vida de aplicaciones
Git y Jenkins. El futuro en la gestión del ciclo de vida de aplicaciones
 

Destacado (20)

Ciclo vac. 2011 raz. mat. 4º prim (1)
Ciclo vac. 2011 raz. mat. 4º prim (1)Ciclo vac. 2011 raz. mat. 4º prim (1)
Ciclo vac. 2011 raz. mat. 4º prim (1)
 
RECOMENDACIÓN DE LO QUE SE DEBE HACER Y NO EN UNA ENTREVISTA
RECOMENDACIÓN DE LO QUE SE DEBE HACER Y NO EN UNA ENTREVISTARECOMENDACIÓN DE LO QUE SE DEBE HACER Y NO EN UNA ENTREVISTA
RECOMENDACIÓN DE LO QUE SE DEBE HACER Y NO EN UNA ENTREVISTA
 
La etiqueta en la oficina
La etiqueta en la oficinaLa etiqueta en la oficina
La etiqueta en la oficina
 
Protocolo en público
Protocolo en públicoProtocolo en público
Protocolo en público
 
Feudalismo
FeudalismoFeudalismo
Feudalismo
 
Herramientas web
Herramientas webHerramientas web
Herramientas web
 
Taxonomia
TaxonomiaTaxonomia
Taxonomia
 
Clientes
ClientesClientes
Clientes
 
9/12/10 Germán Tenorio Vasconcelos el condón, arma eficaz contra las enfermed...
9/12/10 Germán Tenorio Vasconcelos el condón, arma eficaz contra las enfermed...9/12/10 Germán Tenorio Vasconcelos el condón, arma eficaz contra las enfermed...
9/12/10 Germán Tenorio Vasconcelos el condón, arma eficaz contra las enfermed...
 
Oficio fundacion niñez y vida
Oficio fundacion niñez y vidaOficio fundacion niñez y vida
Oficio fundacion niñez y vida
 
Porcunatv
PorcunatvPorcunatv
Porcunatv
 
COLOMBIA NECESITA LA OFICINA DE LA ONU PARA LOS DDHH
COLOMBIA NECESITA LA OFICINA DE LA ONU PARA LOS DDHHCOLOMBIA NECESITA LA OFICINA DE LA ONU PARA LOS DDHH
COLOMBIA NECESITA LA OFICINA DE LA ONU PARA LOS DDHH
 
Req. esgoto pedras brancas
Req. esgoto pedras brancasReq. esgoto pedras brancas
Req. esgoto pedras brancas
 
Mikel
MikelMikel
Mikel
 
Relato 41
Relato 41Relato 41
Relato 41
 
Amalfy ramirez actividad1_mapa_c
Amalfy ramirez actividad1_mapa_cAmalfy ramirez actividad1_mapa_c
Amalfy ramirez actividad1_mapa_c
 
Software contable facil
Software contable facilSoftware contable facil
Software contable facil
 
Bj
BjBj
Bj
 
Calendario anual 2013
Calendario anual 2013Calendario anual 2013
Calendario anual 2013
 
Grafico diario del eurostoxx 50 para el 29 07 2013
Grafico diario del eurostoxx 50 para el 29 07 2013Grafico diario del eurostoxx 50 para el 29 07 2013
Grafico diario del eurostoxx 50 para el 29 07 2013
 

Similar a Buildout: Crear y desplegar entornos reproducibles en Python

Plone - Introducción y instalación
Plone - Introducción y instalaciónPlone - Introducción y instalación
Plone - Introducción y instalaciónajussis
 
Curso Plone Secundo Sesion
Curso Plone   Secundo SesionCurso Plone   Secundo Sesion
Curso Plone Secundo Sesionajussis
 
Open ERP e-Ghost-03-cursillo e-ghost 2010 - open erp como sw de gestion contable
Open ERP e-Ghost-03-cursillo e-ghost 2010 - open erp como sw de gestion contableOpen ERP e-Ghost-03-cursillo e-ghost 2010 - open erp como sw de gestion contable
Open ERP e-Ghost-03-cursillo e-ghost 2010 - open erp como sw de gestion contableOpen ERP Finanzas
 
Cursillos e-ghost Septiembre 2010. Open ERP como software de gestión contable
Cursillos e-ghost Septiembre 2010. Open ERP como software de gestión contableCursillos e-ghost Septiembre 2010. Open ERP como software de gestión contable
Cursillos e-ghost Septiembre 2010. Open ERP como software de gestión contableAlex Rayón Jerez
 
Proyect Evenge. Event manager
Proyect Evenge. Event managerProyect Evenge. Event manager
Proyect Evenge. Event managerIvan Ortega
 
Cómo crear ports en FreeBSD #PicnicCode2015
Cómo crear ports en FreeBSD #PicnicCode2015Cómo crear ports en FreeBSD #PicnicCode2015
Cómo crear ports en FreeBSD #PicnicCode2015OpenSistemas
 
El servidor perfecto
El servidor perfectoEl servidor perfecto
El servidor perfectobetabeers
 
Clusters Beowulf
Clusters BeowulfClusters Beowulf
Clusters Beowulfsrcid
 
Git para-principiantes
Git para-principiantesGit para-principiantes
Git para-principiantesnscoder_mad
 
Intro a cakephp
Intro a cakephpIntro a cakephp
Intro a cakephpbetabeers
 
Windows Vista Vs. Ubuntu 8.04
Windows Vista Vs. Ubuntu 8.04Windows Vista Vs. Ubuntu 8.04
Windows Vista Vs. Ubuntu 8.04Aprende Viendo
 

Similar a Buildout: Crear y desplegar entornos reproducibles en Python (20)

ATICA DevOps
ATICA DevOpsATICA DevOps
ATICA DevOps
 
Plone - Introducción y instalación
Plone - Introducción y instalaciónPlone - Introducción y instalación
Plone - Introducción y instalación
 
Curso Plone Secundo Sesion
Curso Plone   Secundo SesionCurso Plone   Secundo Sesion
Curso Plone Secundo Sesion
 
Jenkins, no me rompas los builds!
Jenkins, no me rompas los builds!Jenkins, no me rompas los builds!
Jenkins, no me rompas los builds!
 
202204-Modernizando aplicaciones legacy
202204-Modernizando aplicaciones legacy202204-Modernizando aplicaciones legacy
202204-Modernizando aplicaciones legacy
 
Open ERP e-Ghost-03-cursillo e-ghost 2010 - open erp como sw de gestion contable
Open ERP e-Ghost-03-cursillo e-ghost 2010 - open erp como sw de gestion contableOpen ERP e-Ghost-03-cursillo e-ghost 2010 - open erp como sw de gestion contable
Open ERP e-Ghost-03-cursillo e-ghost 2010 - open erp como sw de gestion contable
 
Cursillos e-ghost Septiembre 2010. Open ERP como software de gestión contable
Cursillos e-ghost Septiembre 2010. Open ERP como software de gestión contableCursillos e-ghost Septiembre 2010. Open ERP como software de gestión contable
Cursillos e-ghost Septiembre 2010. Open ERP como software de gestión contable
 
Gestión Remota de Equipos con Python
Gestión Remota de Equipos con PythonGestión Remota de Equipos con Python
Gestión Remota de Equipos con Python
 
Taller Archlinux - 1ª Sesión
Taller Archlinux - 1ª SesiónTaller Archlinux - 1ª Sesión
Taller Archlinux - 1ª Sesión
 
Proyect Evenge. Event manager
Proyect Evenge. Event managerProyect Evenge. Event manager
Proyect Evenge. Event manager
 
Instalar odoo 9 en Linux Debian
Instalar odoo 9 en Linux DebianInstalar odoo 9 en Linux Debian
Instalar odoo 9 en Linux Debian
 
Cómo crear ports en FreeBSD #PicnicCode2015
Cómo crear ports en FreeBSD #PicnicCode2015Cómo crear ports en FreeBSD #PicnicCode2015
Cómo crear ports en FreeBSD #PicnicCode2015
 
PDIDTI-S7.pptx
PDIDTI-S7.pptxPDIDTI-S7.pptx
PDIDTI-S7.pptx
 
El servidor perfecto
El servidor perfectoEl servidor perfecto
El servidor perfecto
 
Clusters Beowulf
Clusters BeowulfClusters Beowulf
Clusters Beowulf
 
Git para-principiantes
Git para-principiantesGit para-principiantes
Git para-principiantes
 
Intro a cakephp
Intro a cakephpIntro a cakephp
Intro a cakephp
 
Intro a cakephp
Intro a cakephpIntro a cakephp
Intro a cakephp
 
Windows Vista Vs. Ubuntu 8.04
Windows Vista Vs. Ubuntu 8.04Windows Vista Vs. Ubuntu 8.04
Windows Vista Vs. Ubuntu 8.04
 
Git y github básico
Git y github básicoGit y github básico
Git y github básico
 

Último

Guiaparacrearslideshareticsvirtual2024abril
Guiaparacrearslideshareticsvirtual2024abrilGuiaparacrearslideshareticsvirtual2024abril
Guiaparacrearslideshareticsvirtual2024abriljulianagomezm2
 
Alexander Rubilar, Enzo Tapia - eCommerce Day Chile 2024
Alexander Rubilar, Enzo Tapia - eCommerce Day Chile 2024Alexander Rubilar, Enzo Tapia - eCommerce Day Chile 2024
Alexander Rubilar, Enzo Tapia - eCommerce Day Chile 2024eCommerce Institute
 
Felipe González - eCommerce Day Chile 2024
Felipe González - eCommerce Day Chile 2024Felipe González - eCommerce Day Chile 2024
Felipe González - eCommerce Day Chile 2024eCommerce Institute
 
PRESENTACION EN SST, plan de trabajo del sistema de seguridad y salud en el t...
PRESENTACION EN SST, plan de trabajo del sistema de seguridad y salud en el t...PRESENTACION EN SST, plan de trabajo del sistema de seguridad y salud en el t...
PRESENTACION EN SST, plan de trabajo del sistema de seguridad y salud en el t...angierangel29072017
 
Enrique Amarista Graterol - eCommerce Day Chile 2024
Enrique Amarista Graterol - eCommerce Day Chile 2024Enrique Amarista Graterol - eCommerce Day Chile 2024
Enrique Amarista Graterol - eCommerce Day Chile 2024eCommerce Institute
 
CURSO DE INICIACIÓN Á ASTRONOMÍA: O noso lugar no universo
CURSO DE INICIACIÓN Á ASTRONOMÍA: O noso lugar no universoCURSO DE INICIACIÓN Á ASTRONOMÍA: O noso lugar no universo
CURSO DE INICIACIÓN Á ASTRONOMÍA: O noso lugar no universoanoiteenecesaria
 
Act#3.2_Investigación_Bibliográfica_Comunicación_Equipo.pdf
Act#3.2_Investigación_Bibliográfica_Comunicación_Equipo.pdfAct#3.2_Investigación_Bibliográfica_Comunicación_Equipo.pdf
Act#3.2_Investigación_Bibliográfica_Comunicación_Equipo.pdfXimenaGonzlez95
 
Suiwen He - eCommerce Day Chile 2024
Suiwen He  -  eCommerce  Day  Chile 2024Suiwen He  -  eCommerce  Day  Chile 2024
Suiwen He - eCommerce Day Chile 2024eCommerce Institute
 
Mercedes Tomas, Florencia Bianchini - eCommerce Day Chile 2024
Mercedes Tomas, Florencia Bianchini - eCommerce Day Chile 2024Mercedes Tomas, Florencia Bianchini - eCommerce Day Chile 2024
Mercedes Tomas, Florencia Bianchini - eCommerce Day Chile 2024eCommerce Institute
 
Pablo Scasso - eCommerce Day Chile 2024
Pablo Scasso -  eCommerce Day Chile 2024Pablo Scasso -  eCommerce Day Chile 2024
Pablo Scasso - eCommerce Day Chile 2024eCommerce Institute
 
Introduccion al Libro de Genesis - Caps 15 al 17.pdf
Introduccion al Libro de Genesis - Caps 15 al 17.pdfIntroduccion al Libro de Genesis - Caps 15 al 17.pdf
Introduccion al Libro de Genesis - Caps 15 al 17.pdfDaniel425270
 
Sebastián Iturriaga - eCommerce Day Chile 2024
Sebastián Iturriaga - eCommerce Day Chile 2024Sebastián Iturriaga - eCommerce Day Chile 2024
Sebastián Iturriaga - eCommerce Day Chile 2024eCommerce Institute
 
CURSO DE INICIACIÓN Á ASTRONOMÍA Eclipses na Coruña
CURSO DE INICIACIÓN Á ASTRONOMÍA Eclipses na CoruñaCURSO DE INICIACIÓN Á ASTRONOMÍA Eclipses na Coruña
CURSO DE INICIACIÓN Á ASTRONOMÍA Eclipses na Coruñaanoiteenecesaria
 
Nicolás von Graevenitz, Rodrigo Guajardo, Fabián Müller, Alberto Banano Pardo...
Nicolás von Graevenitz, Rodrigo Guajardo, Fabián Müller, Alberto Banano Pardo...Nicolás von Graevenitz, Rodrigo Guajardo, Fabián Müller, Alberto Banano Pardo...
Nicolás von Graevenitz, Rodrigo Guajardo, Fabián Müller, Alberto Banano Pardo...eCommerce Institute
 
Presupuesto por Resultados de Seguridad Ciudadana .pptx
Presupuesto por Resultados de Seguridad Ciudadana .pptxPresupuesto por Resultados de Seguridad Ciudadana .pptx
Presupuesto por Resultados de Seguridad Ciudadana .pptxhugogabrielac1
 
Francisco Irarrazaval, Marcos Pueyrredon - eCommerce Day Chile 2024
Francisco Irarrazaval, Marcos Pueyrredon - eCommerce Day Chile 2024Francisco Irarrazaval, Marcos Pueyrredon - eCommerce Day Chile 2024
Francisco Irarrazaval, Marcos Pueyrredon - eCommerce Day Chile 2024eCommerce Institute
 
José Ignacio Calle, Nathalie Jacobs - eCommerce Day Chile 2024
José Ignacio Calle, Nathalie Jacobs - eCommerce Day Chile 2024José Ignacio Calle, Nathalie Jacobs - eCommerce Day Chile 2024
José Ignacio Calle, Nathalie Jacobs - eCommerce Day Chile 2024eCommerce Institute
 

Último (18)

Guiaparacrearslideshareticsvirtual2024abril
Guiaparacrearslideshareticsvirtual2024abrilGuiaparacrearslideshareticsvirtual2024abril
Guiaparacrearslideshareticsvirtual2024abril
 
Alexander Rubilar, Enzo Tapia - eCommerce Day Chile 2024
Alexander Rubilar, Enzo Tapia - eCommerce Day Chile 2024Alexander Rubilar, Enzo Tapia - eCommerce Day Chile 2024
Alexander Rubilar, Enzo Tapia - eCommerce Day Chile 2024
 
Felipe González - eCommerce Day Chile 2024
Felipe González - eCommerce Day Chile 2024Felipe González - eCommerce Day Chile 2024
Felipe González - eCommerce Day Chile 2024
 
PRESENTACION EN SST, plan de trabajo del sistema de seguridad y salud en el t...
PRESENTACION EN SST, plan de trabajo del sistema de seguridad y salud en el t...PRESENTACION EN SST, plan de trabajo del sistema de seguridad y salud en el t...
PRESENTACION EN SST, plan de trabajo del sistema de seguridad y salud en el t...
 
Enrique Amarista Graterol - eCommerce Day Chile 2024
Enrique Amarista Graterol - eCommerce Day Chile 2024Enrique Amarista Graterol - eCommerce Day Chile 2024
Enrique Amarista Graterol - eCommerce Day Chile 2024
 
CURSO DE INICIACIÓN Á ASTRONOMÍA: O noso lugar no universo
CURSO DE INICIACIÓN Á ASTRONOMÍA: O noso lugar no universoCURSO DE INICIACIÓN Á ASTRONOMÍA: O noso lugar no universo
CURSO DE INICIACIÓN Á ASTRONOMÍA: O noso lugar no universo
 
Act#3.2_Investigación_Bibliográfica_Comunicación_Equipo.pdf
Act#3.2_Investigación_Bibliográfica_Comunicación_Equipo.pdfAct#3.2_Investigación_Bibliográfica_Comunicación_Equipo.pdf
Act#3.2_Investigación_Bibliográfica_Comunicación_Equipo.pdf
 
Suiwen He - eCommerce Day Chile 2024
Suiwen He  -  eCommerce  Day  Chile 2024Suiwen He  -  eCommerce  Day  Chile 2024
Suiwen He - eCommerce Day Chile 2024
 
Mercedes Tomas, Florencia Bianchini - eCommerce Day Chile 2024
Mercedes Tomas, Florencia Bianchini - eCommerce Day Chile 2024Mercedes Tomas, Florencia Bianchini - eCommerce Day Chile 2024
Mercedes Tomas, Florencia Bianchini - eCommerce Day Chile 2024
 
Pablo Scasso - eCommerce Day Chile 2024
Pablo Scasso -  eCommerce Day Chile 2024Pablo Scasso -  eCommerce Day Chile 2024
Pablo Scasso - eCommerce Day Chile 2024
 
Biomecánica y análisis de puestos trabajo pptx
Biomecánica y análisis de puestos trabajo pptxBiomecánica y análisis de puestos trabajo pptx
Biomecánica y análisis de puestos trabajo pptx
 
Introduccion al Libro de Genesis - Caps 15 al 17.pdf
Introduccion al Libro de Genesis - Caps 15 al 17.pdfIntroduccion al Libro de Genesis - Caps 15 al 17.pdf
Introduccion al Libro de Genesis - Caps 15 al 17.pdf
 
Sebastián Iturriaga - eCommerce Day Chile 2024
Sebastián Iturriaga - eCommerce Day Chile 2024Sebastián Iturriaga - eCommerce Day Chile 2024
Sebastián Iturriaga - eCommerce Day Chile 2024
 
CURSO DE INICIACIÓN Á ASTRONOMÍA Eclipses na Coruña
CURSO DE INICIACIÓN Á ASTRONOMÍA Eclipses na CoruñaCURSO DE INICIACIÓN Á ASTRONOMÍA Eclipses na Coruña
CURSO DE INICIACIÓN Á ASTRONOMÍA Eclipses na Coruña
 
Nicolás von Graevenitz, Rodrigo Guajardo, Fabián Müller, Alberto Banano Pardo...
Nicolás von Graevenitz, Rodrigo Guajardo, Fabián Müller, Alberto Banano Pardo...Nicolás von Graevenitz, Rodrigo Guajardo, Fabián Müller, Alberto Banano Pardo...
Nicolás von Graevenitz, Rodrigo Guajardo, Fabián Müller, Alberto Banano Pardo...
 
Presupuesto por Resultados de Seguridad Ciudadana .pptx
Presupuesto por Resultados de Seguridad Ciudadana .pptxPresupuesto por Resultados de Seguridad Ciudadana .pptx
Presupuesto por Resultados de Seguridad Ciudadana .pptx
 
Francisco Irarrazaval, Marcos Pueyrredon - eCommerce Day Chile 2024
Francisco Irarrazaval, Marcos Pueyrredon - eCommerce Day Chile 2024Francisco Irarrazaval, Marcos Pueyrredon - eCommerce Day Chile 2024
Francisco Irarrazaval, Marcos Pueyrredon - eCommerce Day Chile 2024
 
José Ignacio Calle, Nathalie Jacobs - eCommerce Day Chile 2024
José Ignacio Calle, Nathalie Jacobs - eCommerce Day Chile 2024José Ignacio Calle, Nathalie Jacobs - eCommerce Day Chile 2024
José Ignacio Calle, Nathalie Jacobs - eCommerce Day Chile 2024
 

Buildout: Crear y desplegar entornos reproducibles en Python

  • 1. Buildout: crear y desplegar entornos reproducibles en Internet Solutions www.codesyntax.com Azitain industrialdea, 3-K E-20600 Eibar Tel.: +34 943821780 Python Aitzol Naberan - @aitzol PyconEs – Zaragoza - 09-10-2014
  • 4. Bien, vale, pero.. ● Sitios de noticias colaborativos ● Sitios para comunidades ● Portales corporativos e intranets ● Sitios multilingües ● I + D
  • 6. De donde venimos Allá por el 2001...
  • 7. Zope ● Definición oficial: Servidor de aplicaciones web orientada a objetos, gratuita, open-source, escrita en Python ● Podemos resumirlo como una manera de publicar objetos python en un entorno web. ● Originalmente desarrollado para mejorar/reemplazar la programación CGI
  • 8. Zope ● Introdujo el concepto de base de datos orientada a objectos (ZODB) en el 2001 ● Programación through-the-web(en el navegador), pero no se lo digáis a nadie ● Versión restringida del interprete de python por razones de seguridad ● DTML y ZPT como lenguaje de plantillas
  • 9. Zope .../2.5/2.6 ● Un fichero tar ● Las primeras versiones incluían su propio interprete python (2.1) ● El desarrollo se hacía mediante “Products”:carpetas con un __init__.py y algo de código de inicialización ● Desplegar el desarrollo en una carpeta y reiniciar
  • 10. Zope 2.7/2.8/2.9 ● Desde un único fichero -> instalación ● ./configure && make && make install ● Python del sistema/custom ● Zope instance: una instalación, N instancias ● Instancias ZEO para desacoplar la base de datos
  • 12. Plone es un CMS ● Simple y potente ● Flexibilidad en el flujo de publicación ● Seguridad granular (users, groups, roles, permissions) ● Extensible ● Usabilidad
  • 13. Pero la instalación... ● Plone 1.x, 2.0, 2.1, 2.5, 3.0, 3.1: ● Tarball Zope 2.6, 2.7, → 2.8, 2.9 and 2.10 ● Plone 3 (2007) and 3.1 (2008): ● Zope → Zope 3: small reusable components ● Plone 3.2 (2009): ● Tarball → eggs ● Everyone started developing “python eggs” for Plone
  • 14. Instalación compleja ● Con la nueva distribución de eggs, la instalación ya no es descomprimir un tar ● Setup.py instala muchos eggs: ● Plone 3.x: +150 ● Plone 4.x: +250 ● Cabe la posibilidad de tener instalaciones complejas
  • 15. Arquitectura Plone Apache/Nginx :80 Zope (w Plone) :8080 ZEO (w ZODB) :8081
  • 16. Arquitectura Plone Apache/Nginx :80 Zope (w Plone) :8082 ZEO (w ZODB) :8084 Zope (w Plone) :8081 Zope (w Plone) :8083
  • 17. Arquitectura Plone Apache/Nginx :80 Zope (w Plone) :8082 ZEO (w ZODB) :8084 Zope (w Plone) :8081 Zope (w Plone) :8083 SERVER 1 SERVER 2 SERVER 3
  • 18. Necesidades ● Despliegue sencillo (2-3 comandos) ● Reproducible: ● Necesitamos ejecutar el procedimiento bastantes veces (cada vez que añadimos un nuevo egg) ● Necesitamos ejecutarlo en múltiples servidores (propio ,desarrollo , producción, ...)
  • 19. Buildout ● Jim Fulton (creador de Zope), crea zc.buildout ● Para solventar 2 problemas: ● Application-centric assembly and deployment ● Repeatable assembly of programs from python eggs
  • 20. ¿Cómo lo soluciona buildout? ● Fichero de configuración en formato ini (buildout.cfg) ● Ejecución ordenada de partes (parts) ● Cada parte ejecuta una “receta”: ● Una receta es un huevo python especializado en una tarea (filosofía unix) ● Y ya
  • 21. Ejemplo (mínimo) [buildout] parts = installation [installation] recipe = zc.recipe.egg eggs = feedparser interpreter = custompy Crea un interprete python (llamado custompy) con feedparser en el path
  • 22. Ejemplo: Plone [buildout] extensions = mr.developer show­picked­versions = true parts = instance zeo omelette zopepy extends = http://dist.plone.org/release/4.3.3/versions.cfg (show plonebuildout.cfg)
  • 24. Entornos reproducibles ● Conviene fijar las versiones exactas de todo lo que se usa ● Defines que te descargas desde donde ● La estructura del sistema de ficheros es siempre la misma ● Si todas las versiones se fijan correctamente, siempre se obtiene la misma instalación
  • 25. ¿Como desarrollamos? ● No tienen porque tener versión: ● Podemos cambiar de las versiones fijadas a checkouts (svn, git, hg, …) en el sistema de ficheros utilizando una extensión: mr.developer ● Las extensiones son similares a las recetas ● Activar/desactivar eggs en desarrollo
  • 26. Y en eso llegó Django ● Definición: high-level python web framework that encourages rapid development and clean, pragmatic desing. ● Normalmente se utiliza para desarrollar soluciones rápidamente contra storage SQL
  • 27. P: ¿Y usáis eso con Django? ● R:Si ! ● P: ¿Por qué? ● R: Esencialmente porque llegamos a Django después de Plone, y ya conocíamos como funcionaba. De esta manera utilizamos una única herramienta para todos nuestros despliegues
  • 28. P: ya pero... ● R: ¿no os he convencido?... ● Un único sistema de despliegue es preferible a dos.
  • 29. Ejemplo: Django [buildout] parts = django staticfiles cron (show djangobuildout.cfg)
  • 30. Extender buildout ● Las partes se pueden extender desde otros ficheros o mediante opciones (OOP concept) ● Se puede extender over-the-net (extends= http://myserver/buildout.cfg) ● Known Good Set of eggs for proper installation ● Crear tu propia receta
  • 31. ¿Qué hacen las recetas? ● Plone: ● Crean una instancia de Zope y ponen todos los eggs en el path ● Configurar puertos, base de datos, blob files, tamaños de cache... ● Crear instancias de ZEO para desacoplar la base de datos (configurar puertos, paths, etc)
  • 32. ¿Qué hacen las recetas? ● Django: ● Crea un intérprete con django instalado en el path (wrapper de python manage.py) ● Ejecución de collect static ● Crea el script WSGI
  • 33. ¿Qué hacen las recetas? ● General: ● Ficheros de configuración para Nginx/Apache (basado en plantillas) ● Descarga paquetes de SCV (svn/git/hg) ● Descargar tarballs ● Crear tareas cron ● Instalar y configurar supervisord
  • 34. ¿Qué hacen las recetas? ● General: ● Configurar balanceadores (pound/haproxy) ● Actualizar ficheros po y subirlos a Google Docs para su traducción. ● Crear links a los huevos activos instalados para poder encontrarlos fácilmente (omellete) ● ...
  • 35. Ejemplo reales ● +120 proyectos con buildout en nuestros servidores ● Todos los desarrolladores conocen como usarlo: ● ./bin/buildout -vv ● Es predecible
  • 36. Ejemplo: www.bertsozale.com NGINX :80 (system package) VARNISH :8081 HAPROXY :8082 ZOPE :8083 ZOPE :8083 ZOPE :8083 ZEO :8084 All in one server
  • 37. Ejemplo: EEA APACHE :80 POUND :8080 ZEO :8080 ZOPE :8081 ZOPE :8082 ZOPE :8083 ZOPE :8084 ZOPE :8081 SERVER 2 ZOPE :8082 ZOPE :8083 ZOPE :8084 ZOPE :8081 SERVER 3 ZOPE :8082 ZOPE :8083 ZOPE SERVER 1 :8084 SERVER 4 SERVER 5
  • 38. Ejemplo: EEA ● 4 servidores, todo configurado con un único fichero buildout. ● https://github.com/eea/esdrt.buildout ● Los sysadmin de EEA Sysadmins adoran la configuración con buildout ● Repetible ● No necesitan permisos de root para la instalación
  • 39. The next cool thing (tm) ● Cada día aparecen nuevas herramientas para la automatización de despliegues ● Fabric, Docker, … ● La inclusión de nuevas herramientas en el equipo puede llegar a ser muy costosa ● ¿Que hacer? ● El uso de buildout no excluye el uso de fabric (por ejemplo). ● ¿Fichero fab sencillo? → úsalo ● ¿muchas lineas de despliegue? → prueba buildout
  • 40. Buildout & fabric ● Fabric también se usa para la automatización y despliegue de entornos ● El uso de buildout no excluye el uso de fabric (¿he comentado esto?) ● Ej: usar fabric para actualizar y ejecutar buildout: ● Actualizar el fichero buildout.cfg desde SCV ● Ejecuta budout -vv ● Reinicia servicios
  • 41. Buildout & fabric ● Algunos proyectos de la EEA lo usan ● Nosotros no, ssh + run buildout ● Experiencias: ● http://tinyurl.com/fab-buildout ● http://tinyurl.com/fab-buildout-so
  • 42. Resumiendo ● Configura y despliega tanto proyectos simples como complejos ● Repetible la instalación → siempre es igual en distintos entornos ● Pensado sobre todo para aplicaciones python(Plone, Zope, Django, Pyramid), pero es posible usarlo para otras cosas: Apache, Pound, HAProxy, Memcached, …

Notas del editor

  1. En una palabra
  2. Zope fomento el dessarrollo basado en web para crear rápidamente sitos web dinámicos a trave del navegador. Si, los scripts de pythn y las plantillas se escribian en formularios web en la interfaz de administración Pero, por razones de seguridad, no se pudia utilizar un interprete Pytho mediante este metodo. Disponias solamente de un subset de la librería standar En caso de necesitar la potencía completa del interprete, tenias que escribir 'productos' que se instalaban en el sistema de ficheros Zope introdujo dos lenguajes para plantillas: DTML: algo PHP, donde era muy facil mezclar la lógica y la presentación. ZPT: usaba namespaces XML para crear documentos XML válidos. Mucho mas eficiente separando lógica y presentación.