Your SlideShare is downloading. ×
  • Like
Entornos de desarrollo para symfony2 con vagrant y puppet
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Entornos de desarrollo para symfony2 con vagrant y puppet

  • 3,257 views
Published

Si hay algo tedioso, y repetitivo, al empezar un proyecto con Symfony 2, es preparar el entorno. En los equipos de desarrollo a veces nos encontramos con problemas con los sistemas operativos, y las …

Si hay algo tedioso, y repetitivo, al empezar un proyecto con Symfony 2, es preparar el entorno. En los equipos de desarrollo a veces nos encontramos con problemas con los sistemas operativos, y las versiones de las librerías que cada uno tiene instaladas en su máquina, además de lo pesado que es preparar todo lo necesario en una nueva máquina, por ejemplo, para el nuevo desarrollador que entra en el equipo.

Gracias a Vagrant y Puppet, podemos preparar una configuración común para nuestros proyectos replicable en todos los ordenadores de nuestro equipo de desarrollo, ¡¡incluso en los servidores de pre-producción y producción!! Cada desarrollador puede trabajar en su sistema operativo favorito, con su IDE favorito, y Vagrant hará el resto.

En la primera parte de la charla, haremos una introducción a la problemática de los entornos de desarrollo con Symfony 2, comentando cuales son los pasos para preparar nuestro entorno antes de poder instalar y empezar a trabajar con el framework. También hablaremos del problema con el que a veces nos encontramos al subir código a nuestro servidor, y encontrarnos con que no funciona: ¡¡Pero si en mi máquina va perfecto!!

En la última parte, veremos un caso práctico de como configurar Vagrant con Puppet para tener un entorno completo para Symfony en nuestros equipos de desarrollo.

Published in Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
3,257
On SlideShare
0
From Embeds
0
Number of Embeds
6

Actions

Shares
Downloads
48
Comments
0
Likes
7

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. ALGO SOBRE MIVICENT SORIA DURÁDesarrollador Web (en Symfony 2)Trabajo en Social Point como Automation Engineer
  • 2. ÍNDICE1. Introducción2. ¿Qué es Vagrant?3. ¿Qué es Puppet?4. ¿Problemas?5. ¿Cómo lo uso en mis proyectos?
  • 3. INTRODUCCIÓN¿Qué hacemos para preparar un nuevo ordenador?
  • 4. SISTEMA OPERATIVO¿Qué pasa si yo uso Linux y mi compañero MAC?Ubuntu: Apt-getRedHat: YumMac: ¿MAMP? ¿Zend Studio? ¿Macports? ¿Homebrew?Windows: ¿WAMP? ¿caos?
  • 5. IDEPHPStormSublime Text 2NetbeansEclipse + PDTVi / Emacs
  • 6. PREPARAR EL PROYECTOClonamos el repositorioConfiguramos virtual hostInstalamos vendorsCreamos BBDDPersonalizamos parameters.yml
  • 7. PUESTA EN PRODUCCIÓN (O PRE-PRODUCCION)¿Problemas?¡Si en mi máquina funciona!
  • 8. PUESTA EN PRODUCCIÓN (O PRE-PRODUCCION)OBSERVACIONESDiferente sistema operativo.¿Qué versión de PHP tienes? ¿Y en producción?¿Qué versión del servidor de BBDD? ¿Y en producción?¿Y de ese paquete para aquel vendor que usamos?Los tests en local están todos en verde
  • 9. SOLUCIONESMismo S.O. para todosMismos paquetes instaladosMisma configuración en todos los entornos
  • 10. SOLUCIONES¡Pero yo uso Mac!¡Y yo Linux!¡Y yo windows!
  • 11. SOLUCIONESDisponemos de herramientas que nos ayudarán:Vagrant (Virtualización)Puppet o Chef (Aprovisionamiento y configuración)
  • 12. VAGRANTVagrant provides easy to configure,reproducible, and portable workenvironments built on top of industry-standard technology and controlled by asingle consistent workflow to help maximizethe productivity and flexibility of you andyour team.
  • 13. VAGRANT¿Qué es?Herramienta de virtualizaciónPermite crear y configurar entornos de desarrolloportables, ligeros y reproducibles
  • 14. VAGRANTPermite utilizar diversos proveedoresVirtualBoxVMware (De pago)Amazon Web ServicesLos nuestros propios
  • 15. VAGRANTREQUISITOSVirtual Box:Vagrant:https://www.virtualbox.org/http://www.vagrantup.com/
  • 16. VAGRANT¿CÓMO SE USA?OTRAS IMÁGENEShttp://www.vagrantbox.es$ vagrant init precise64 http://files.vagrantup.com/precise64.box$ vagrant up
  • 17. VAGRANTCOMANDOS DISPONIBLESvagrant up - Arranca la máquinavagrant halt - Para la máquinavagrant status - Muestra el estadovagrant destroy - Elimina la máquina virtualvagrant ssh - Conecta por ssh
  • 18. VAGRANTVAGRANTFILEVagrant.configure("2") do |config|config.vm.box = "precise64"config.vm.box_url = "http://files.vagrantup.com/precise64.box"end
  • 19. VAGRANTCONFIGURACIÓNVagrantfileVagrant.configure("2") do |config|config.vm.box = "precise64"config.vm.box_url = "http://files.vagrantup.com/precise64.box"config.vm.network :private_network, ip: "192.168.33.10"config.vm.network :forwarded_port, guest: 80, host: 8080config.vm.provider :virtualbox do |vb|# Dont boot with headless modevb.gui = true# Use VBoxManage to customize the VM.vb.customize ["modifyvm", :id, "--cpus", "2"]vb.customize ["modifyvm", :id, "--memory", "1024"]endend
  • 20. PUPPETExisten varias herramientas de automatización para laconfiguración de sistemasScripts de shellChef (Solo y Client)Puppet (Apply y Agent)
  • 21. SCRIPTS DE SHELLVENTAJASCualquier Unix lo trae por defectoCualquier Sysadmin lo controlaINCONVENIENTESDifícil de mantener cuando creceTodo "a pelo"Difícil de probar
  • 22. PUPPET / CHEFVENTAJASDocumentación"Librerías" ya hechas (módulos/cookbooks)Fácil de probarINCONVENIENTESAprendizaje
  • 23. PUPPET¿QUÉ ES?Herramienta de gestión de configuración para servidoresDefine estados de recursosConfigura una vez, ejecútalo 1000 veces
  • 24. PUPPETTERMINOLOGÍAManifests: DefinicionesModules: "Bundles"TemplatesFacter: Información sobre S.O. (y sistema)Hiera: "DB"
  • 25. PUPPETMANIFESTS/examples/file-1.ppfile {testfile:path => /tmp/testfile,ensure => present,mode => 0640,content => "Im a test file.",}
  • 26. PUPPETMANIFESTS/manifests/default.ppclass base {include mysqlinclude phpinclude apache}include base# óclass { base }
  • 27. PUPPETMODULES/puppet/manifests/default.ppmodules/apache/manifests/ # Manifest in the moduleinit.ppfiles/ # Static filestemplates/vhost.erblib/ # plugins, custom facts, custom resource typestests/ # Example manifestsexamples/ # Example manifestsspec/ # Test with rspec-puppet
  • 28. PUPPETMODULES/modules/apache/manifests/init.ppclass apache::install {package { apache2:ensure => installed,}}class apache::run {service { apache2:enable => true,ensure => running,hasstatus => true,hasrestart => true,require => Class[apache::install],}}class apache {include apache::installinclude apache::run}
  • 29. PUPPETTEMPLATES/modules/apache/templates/vhost.erb<Directory /vagrant/web>Options Indexes FollowSymLinks MultiViewsAllowOverride NoneOrder allow,denyallow from allRewriteEngine OnRewriteBase /<%= project_name %>/webRewriteCond %{REQUEST_FILENAME} !-fRewriteRule ^(.*)$ app.php [QSA,L]DirectoryIndex app.php</Directory>
  • 30. PUPPETTEMPLATES/modules/apache/manifests/init.pp$sitesavailable = /etc/apache2/sites-available$sitesenabled = /etc/apache2/sites-enabledfile { "$sitesavailable/$project_name":content => template(apache/dev.erb),owner => root,group => root,mode => 755,} ->file { "$sitesenabled/$project_name":require => File["$sitesavailable/$project_name"],ensure => link,target => "$sitesavailable/$project_name",notify => Service[apache2],}
  • 31. PUPPETFACTERarchitecture => i386...ipaddress => 172.16.182.129is_virtual => truekernel => Linuxkernelmajversion => 2.6...operatingsystem => CentOSoperatingsystemrelease => 5.5physicalprocessorcount => 0processor0 => Intel(R) Core(TM)2 Duo CPU P8800 @ 2.66GHzprocessorcount => 1productname => VMware Virtual Platform
  • 32. PUPPETHIERA# /etc/puppet/hieradata/appservers.yaml---proxies:- hostname: lb01.example.comipaddress: 192.168.22.21- hostname: lb02.example.comipaddress: 192.168.22.28# Get the structured data:$proxies = hiera(proxies)# Index into the structure:$use_ip = $proxies[1][ipaddress] # will be 192.168.22.28
  • 33. PUPPETCOMO AGENTE
  • 34. PUPPETCOMO AGENTE/MAESTRO
  • 35. ¿PROBLEMAS?COSAS A TENER EN CUENTADependenciasLas clases son singletonsRendimiento
  • 36. ¿PROBLEMAS?DEPENDENCIASclass base {Class[system::resolv]-> Class[apache]-> Class[php]-> Apache::Vhost[dev]include system::resolvinclude apacheinclude phpapache::vhost {dev:project_name => $project_name}}include base
  • 37. ¿PROBLEMAS?CLASES SON SINGLETONSclass apache::vhost {...}apache::vhost {users.example.com:port => 80,docroot => /var/www/personal,}apache::vhost {groups.example.com: } ### FAIL###################define apache::vhost($port = 80) {...}apache::vhost {testhost:port => 8081,}
  • 38. ¿PROBLEMAS?RENDIMIENTOSYMFONY TIENE + 9000 ARCHIVOSIt’s a long known issue that VirtualBox sharedfolder performance degrades quickly as thenumber of files in the shared folder increases.As a project reaches 1000+ files, doing simplethings like running unit tests or even justrunning an app server can be many orders ofmagnitude slower than on a native filesystem(e.g. from 5 seconds to over 5 minutes).
  • 39. ¿PROBLEMAS?RENDIMIENTOUsar NFS mientras sea posible (Requiere permisos de root)SO SoporteMac Sí (instalado por defecto)Linux (Ubuntu) Sí (sudo apt-get install nfs-kernel-server)Windows No
  • 40. ¿PROBLEMAS?RENDIMIENTOVagrantfileVagrant.configure("2") do |config|config.vm.box = "precise64"config.vm.box_url = "http://files.vagrantup.com/precise64.box"...config.vm.synced_folder ".", "/vagrant", :nfs => true...end
  • 41. ¿PROBLEMAS?RENDIMIENTODesactivar Swapexec { disable-swap:path => /sbin,command => swapoff -a,user => root,}
  • 42. ¿CÓMO LO USO EN MIS PROYECTOS?VALE, ME HAS CONVENCIDO, ¿Y AHORA CÓMO LO USO?
  • 43. ¿CÓMO LO USO EN MIS PROYECTOS?(Casi) Listo para usarMódulos completosÚtil en proyectos empezadosHTTPS://PUPHPET.COM
  • 44. ¿CÓMO LO USO EN MIS PROYECTOS?PROYECTOS NUEVOShttps://github.com/vicentgodella/symfony2-vagrant-skeletongit clone git@github.com:vicentgodella/symfony2-vagrant-skeleton.gitcomposer install# Añadir al /etc/hosts:127.0.0.1 sf2-vagrant.devCargar la url http://sf2-vagrant.dev:8080/app_dev.php en el navegador.
  • 45. DEMO
  • 46. ENLACES DE INTERÉSLIBROShttp://www.vagrantup.comhttp://www.puppetlabs.comhttp://forge.puppetlabs.comhttp://puphpet.comPuppet 2.7 CookbookPuppet Types and ProvidersPro PuppetPuppet 3 Beginners Guide
  • 47. ¿PREGUNTAS?vicentgodella@gmail.com@vicentgodellahttps://joind.in/8846