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

PDF
Open Build Service
PDF
Plone Gobierno
PDF
Kitsune documentation
ODP
Virtualización y Provisionamiento: Entornos de desarrollo con Vagrant y Puppet
PDF
Servidor PXE de Instalaciones GNU/Linux
ODP
Gestionando servidores con Puppet
PDF
TALLER: Implementar BigBlueButton en Amazon Web Services (AWS)
ODP
Presentacion Taller de Introducción a Linux SFD2010
Open Build Service
Plone Gobierno
Kitsune documentation
Virtualización y Provisionamiento: Entornos de desarrollo con Vagrant y Puppet
Servidor PXE de Instalaciones GNU/Linux
Gestionando servidores con Puppet
TALLER: Implementar BigBlueButton en Amazon Web Services (AWS)
Presentacion Taller de Introducción a Linux SFD2010

La actualidad más candente (20)

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

Destacado (20)

DOC
Ciclo vac. 2011 raz. mat. 4º prim (1)
DOCX
RECOMENDACIÓN DE LO QUE SE DEBE HACER Y NO EN UNA ENTREVISTA
DOCX
La etiqueta en la oficina
DOCX
Protocolo en público
PPT
Feudalismo
PPTX
Herramientas web
DOCX
Taxonomia
DOC
9/12/10 Germán Tenorio Vasconcelos el condón, arma eficaz contra las enfermed...
PDF
Oficio fundacion niñez y vida
PPTX
PDF
COLOMBIA NECESITA LA OFICINA DE LA ONU PARA LOS DDHH
PDF
Req. esgoto pedras brancas
PPT
DOC
Relato 41
PDF
Amalfy ramirez actividad1_mapa_c
PDF
Software contable facil
PDF
Calendario anual 2013
PDF
Grafico diario del eurostoxx 50 para el 29 07 2013
Ciclo vac. 2011 raz. mat. 4º prim (1)
RECOMENDACIÓN DE LO QUE SE DEBE HACER Y NO EN UNA ENTREVISTA
La etiqueta en la oficina
Protocolo en público
Feudalismo
Herramientas web
Taxonomia
9/12/10 Germán Tenorio Vasconcelos el condón, arma eficaz contra las enfermed...
Oficio fundacion niñez y vida
COLOMBIA NECESITA LA OFICINA DE LA ONU PARA LOS DDHH
Req. esgoto pedras brancas
Relato 41
Amalfy ramirez actividad1_mapa_c
Software contable facil
Calendario anual 2013
Grafico diario del eurostoxx 50 para el 29 07 2013
Publicidad

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

PDF
Curso Plone Secundo Sesion
PDF
Plone - Introducción y instalación
PDF
Virtualenv y buildout
ODP
Curso Mu
ODP
Desarrollo Aplicaciones Plone
ODP
Desarrollo Aplicaciones Plone
ODP
Fabric más allá de lo básico
PDF
Sistemas de publicación de noticias y contenidos multimedia Web para Medios d...
PDF
Deployer PHP. Presentación para #PHPSevilla
PDF
Plonegov - Vínculos de cooperación entre gobiernos que acercan a sus ciudadan...
PDF
Plone CMS en el Proyecto CANAIMA GNU/Linux
PDF
Curso Kubernetes CodeURJC
PDF
A Strategy for Container Lifecycle Management
PDF
Desarrollando aplicaciones web con Zope 3
PDF
Programación basada en componentes para Programadores Python
PDF
Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluc...
PDF
Administración ágil de sistemas en el entorno de una startup
PDF
Slides for World Plone Day 2010 (Spanish)
PPTX
Guia de redireccionamiento en ubuntu
PPTX
Game of pods - Kubernetes
Curso Plone Secundo Sesion
Plone - Introducción y instalación
Virtualenv y buildout
Curso Mu
Desarrollo Aplicaciones Plone
Desarrollo Aplicaciones Plone
Fabric más allá de lo básico
Sistemas de publicación de noticias y contenidos multimedia Web para Medios d...
Deployer PHP. Presentación para #PHPSevilla
Plonegov - Vínculos de cooperación entre gobiernos que acercan a sus ciudadan...
Plone CMS en el Proyecto CANAIMA GNU/Linux
Curso Kubernetes CodeURJC
A Strategy for Container Lifecycle Management
Desarrollando aplicaciones web con Zope 3
Programación basada en componentes para Programadores Python
Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluc...
Administración ágil de sistemas en el entorno de una startup
Slides for World Plone Day 2010 (Spanish)
Guia de redireccionamiento en ubuntu
Game of pods - Kubernetes

Último (20)

PPTX
Sectas Protestantes y la Iglesia que fundó Cristo
PPTX
Difusión Empresa Protocolo TMERT V2.pptx
PPTX
Psicologia politica: Antecedentes e Hisotoria.
PDF
Estructura del Plan Estratégico Institucional del Ministerio Público de Perú_...
PDF
evaluacion de riesgos conceptos y herram
PPTX
Yo seré tu kokua la compañera que anhelas .pptx
PPTX
PRESENTACIONES CHAPA PARA TESIS SECUNDARIA.pptx
PPTX
OIDO histoembriologi, resumen corto de la clase
PPTX
Heridas en traumatología en estudio .pptx
PPTX
Paradigmas de la psicopedagogía UGD presentacion de clase
PDF
La castidad nos hace libres para amar (Jovenes).pdf
PPTX
Casa de Boyacá informe de actividades 2024
PDF
Las finanzas Bíblicas, dando un mejor resultado
PPTX
Alta presión en productos de la carne de cerdo
PDF
7.3 Audiencias de Reforma y Revisión en el Proceso.pdf
PPTX
NOM 019 STPS Conformación de la comision mixta
PPTX
2. RUBRICA PROBLEMA DE INVESTIGACIÓN (4).pptx
PPTX
Teología 1 - Unidad 1. Introducción.pptx
PPTX
NORMA 029 STPS INSTALACIONES ELECTRICAS.
PDF
CIENCIAS SOCIALES HISTORIA identificamos las características de la independen...
Sectas Protestantes y la Iglesia que fundó Cristo
Difusión Empresa Protocolo TMERT V2.pptx
Psicologia politica: Antecedentes e Hisotoria.
Estructura del Plan Estratégico Institucional del Ministerio Público de Perú_...
evaluacion de riesgos conceptos y herram
Yo seré tu kokua la compañera que anhelas .pptx
PRESENTACIONES CHAPA PARA TESIS SECUNDARIA.pptx
OIDO histoembriologi, resumen corto de la clase
Heridas en traumatología en estudio .pptx
Paradigmas de la psicopedagogía UGD presentacion de clase
La castidad nos hace libres para amar (Jovenes).pdf
Casa de Boyacá informe de actividades 2024
Las finanzas Bíblicas, dando un mejor resultado
Alta presión en productos de la carne de cerdo
7.3 Audiencias de Reforma y Revisión en el Proceso.pdf
NOM 019 STPS Conformación de la comision mixta
2. RUBRICA PROBLEMA DE INVESTIGACIÓN (4).pptx
Teología 1 - Unidad 1. Introducción.pptx
NORMA 029 STPS INSTALACIONES ELECTRICAS.
CIENCIAS SOCIALES HISTORIA identificamos las características de la independen...

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

  • #4: En una palabra
  • #9: 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.