Monday, June 17, 13
Monday, June 17, 13
¿Quién soy?⁃ Argentino viviendo en Estados Unidosdesde 1999⁃ Desarrollador PHP & Symfony⁃ Fundador de la primera lista de ...
Monday, June 17, 13
Monday, June 17, 13
⁃ Fundada en 2005⁃ Proveedor de servicios de hostingespecializado en PHP, Symfony,ZendFramework, y otros⁃ Servidores en Eu...
⁃ Muy activos en la comunidad de OpenSource contribuyendo con código opatrocinando eventos y grupos deusuariosLa comunidad...
Deployment?Monday, June 17, 13
DeploymentDeployment de Softwarecomprende todas las actividadesque hacen disponible un sistemade software para su uso.http...
DeploymentEs una parte muyimportante de la vidade la aplicaciónMonday, June 17, 13
DeploymentEs una parte muyimportante crítica de lavida de la aplicaciónMonday, June 17, 13
DeploymentNo debe ser unpensamientosecundarioMonday, June 17, 13
DeploymentDebe ser predecibleMonday, June 17, 13
DeploymentCuanto más lo hagasmejor funcionaráMonday, June 17, 13
Monday, June 17, 13
MetasMonday, June 17, 13
Deployment: MetasUn-clickMonday, June 17, 13
desplieguecontinuoDeployment: MetasMonday, June 17, 13
Despliegue de Aplicaciones PHPMonday, June 17, 13
Despliegue de Aplicaciones PHPMonday, June 17, 13
Despliegue de Aplicaciones PHPMonday, June 17, 13
A toda hora& lugarDeployment: MetasMonday, June 17, 13
CualquieraDeployment: MetasMonday, June 17, 13
ConfiableDeployment: MetasMonday, June 17, 13
RollbacksDeployment: MetasMonday, June 17, 13
SindowntimeDeployment: MetasMonday, June 17, 13
Re-usableDeployment: MetasMonday, June 17, 13
EscalableDeployment: MetasMonday, June 17, 13
VerdadesMonday, June 17, 13
Deployment: Verdad #1El despliegue comienza con el desarrollador•Entorno de desarrollo lo másparecido a servidores deprodu...
Deployment: Verdad #2El éxito depende de la configuración del S.O.•Puppet/Chef para manejar lospaquetes y configuración delS...
Deployment: Verdad #3El monitoreo incrementa el “uptime”•Herramientas de Monitoreo informan loque sucede en tus servidores...
Metodologías deDeploymentMonday, June 17, 13
Deployment: Metodologías•Al estilo VIM•Copia con FTP•rsync•source control (svn, git)•Herramientas de Build (ant, phing)•He...
Pasos comunesMonday, June 17, 13
Deployment x Primera vez•Copiar archivos aservidor(es)•Configurar variables en elservidor•Cargar fixtures de DB•Procesar e i...
•Copiar archivos aservidor(es)•Aplicar cambios de DB(migraciones)•Procesar e instalar assets•“Preparar” el cache•“Activar”...
•Copiar archivos aservidor(es)•Aplicar cambios de DB(migraciones)•Procesar e instalar assets•“Preparar” el cache•“Activar”...
DesafíosMonday, June 17, 13
Deployment: Desafíos•rsync•git pull•configurar git repo en red local paraahorrar ancho de banda y evitarproblemas de conect...
•usar herramienta que permita ir de 1a n servidores fácilmente (ej.capistrano)•pssh permite enviar comandos enparalelo a m...
•Prueba!•Crea tags•branches dedicados (master paraproducción)•deploy cada release en un directorionuevoRollbacksSoluciones...
•usar conexiones basadas en ssh•no guardes contraseñas en sourcecontrol•guarda datos sensibles (passwords)en variables de ...
Migraciones de DB•Doctrine Migrations•Considera usar DBs de documentoscomo MongoDB“Las mejores migraciones son lasque no t...
Assets estáticos•YUICompress comprime archivos JS yCSS•Activa compresión gzip en el servidor Web•Agrega versiones a los li...
Caching•Actualiza un servidor mientras otrosprocesan el tráfico•Agrupa servidores y actualiza un grupo ala vez•Ejecuta coma...
Conflicto de permisos de archivos•Corre Apache/PHP con el mismo usuario•Usa php-fpm en vez de mod_php•Crea usuario “deploy”...
Otros problemas comunesMonday, June 17, 13
Deployment:Otros problemas comunes• Sistema de archivos ‘Case sensitive’• Configuraciones diferentes• Software de terceros ...
EjemplosMonday, June 17, 13
Deployment:EjemplosEl despliegue continuo más simple!<?phpexec(‘/usr/bin/env -i HOME=/var/www git pull’);echo “Listo!”;hoo...
Capistrano•Escrito en Ruby•Muy extensible•Gran número de extensiones•Instalación simple en el cliente$ gem install capistr...
Capistranoset :application, "myapp" # Nombre de aplicaciónset :deploy_to, "/var/www/myapp"set :user, "deployer"set :use_su...
$ cap deploy:setupCapistranoDeployment:EjemplosMonday, June 17, 13
|-- releases`-- shared|-- logs`-- uploadsCapistranoDeployment:EjemplosMonday, June 17, 13
Capistrano$ cap deploy$ cap deploy:migrations$ cap deploy:rollbackDeployment:EjemplosMonday, June 17, 13
|-- current(symlink a releases/20130112)|-- releases| `-- 20130112`-- shared|-- logs`-- uploadsCapistranoDeployment:Ejempl...
Deployment:Otras opciones•Fabric•WePloy•Phing•Magallanes•JenkinsMonday, June 17, 13
HerramientasMonday, June 17, 13
Deployment:HerramientasApp Metrics: StatsD & GraphiteMonday, June 17, 13
Logging: LogstashEnvia logs desde fuentes multiples, lasprocesa, obtiene la fecha correcta, indexa yofrece búsquedaDeploym...
Logging: LogstashConfigura Apache para generar logs en jsonLogFormat "{ "@timestamp": "%{%Y-%m-%dT%H:%M:%S%z}t", "@fields":...
Logging: GraylogDeployment:HerramientasMonday, June 17, 13
Logging: KibanaKibana ofrece una forma fácil y amigable devisualizar y buscar datos en tus logsDeployment:HerramientasMond...
Packaging: fpmhttps://github.com/jordansissel/fpmCrea paquetes para plataformas múltiples(deb, rpm, etc) muy fácilmentefpm...
RepasoMonday, June 17, 13
•Deja de usar FTPMonday, June 17, 13
•Deja de usar FTP•Planea tempranoMonday, June 17, 13
•Deja de usar FTP•Planea temprano•PractícaloMonday, June 17, 13
•Deja de usar FTP•Planea temprano•Practícalo•MonitorizaMonday, June 17, 13
•Deja de usar FTP•Planea temprano•Practícalo•Monitoriza•AUTOMATIZA!Monday, June 17, 13
Preguntas?Transparencias: http://slideshare.net/pgodelTwitter: @pgodelE-mail: pablo@servergrove.comMonday, June 17, 13
Gracias!Transparencias: http://slideshare.net/pgodelTwitter: @pgodelE-mail: pablo@servergrove.comMonday, June 17, 13
Upcoming SlideShare
Loading in …5
×

Despliegue de aplicaciones PHP

1,414 views

Published on

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,414
On SlideShare
0
From Embeds
0
Number of Embeds
107
Actions
Shares
0
Downloads
15
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Despliegue de aplicaciones PHP

  1. 1. Monday, June 17, 13
  2. 2. Monday, June 17, 13
  3. 3. ¿Quién soy?⁃ Argentino viviendo en Estados Unidosdesde 1999⁃ Desarrollador PHP & Symfony⁃ Fundador de la primera lista de discusiónde PHP de habla hispana- Socio fundador de ServerGrove⁃ Amante de la parrillaMonday, June 17, 13
  4. 4. Monday, June 17, 13
  5. 5. Monday, June 17, 13
  6. 6. ⁃ Fundada en 2005⁃ Proveedor de servicios de hostingespecializado en PHP, Symfony,ZendFramework, y otros⁃ Servidores en Europa y Estados UnidosServerGrove!Monday, June 17, 13
  7. 7. ⁃ Muy activos en la comunidad de OpenSource contribuyendo con código opatrocinando eventos y grupos deusuariosLa comunidad es nuestra guiaAlicante PHPMonday, June 17, 13
  8. 8. Deployment?Monday, June 17, 13
  9. 9. DeploymentDeployment de Softwarecomprende todas las actividadesque hacen disponible un sistemade software para su uso.http://en.wikipedia.org/wiki/Software_deploymentMonday, June 17, 13
  10. 10. DeploymentEs una parte muyimportante de la vidade la aplicaciónMonday, June 17, 13
  11. 11. DeploymentEs una parte muyimportante crítica de lavida de la aplicaciónMonday, June 17, 13
  12. 12. DeploymentNo debe ser unpensamientosecundarioMonday, June 17, 13
  13. 13. DeploymentDebe ser predecibleMonday, June 17, 13
  14. 14. DeploymentCuanto más lo hagasmejor funcionaráMonday, June 17, 13
  15. 15. Monday, June 17, 13
  16. 16. MetasMonday, June 17, 13
  17. 17. Deployment: MetasUn-clickMonday, June 17, 13
  18. 18. desplieguecontinuoDeployment: MetasMonday, June 17, 13
  19. 19. Despliegue de Aplicaciones PHPMonday, June 17, 13
  20. 20. Despliegue de Aplicaciones PHPMonday, June 17, 13
  21. 21. Despliegue de Aplicaciones PHPMonday, June 17, 13
  22. 22. A toda hora& lugarDeployment: MetasMonday, June 17, 13
  23. 23. CualquieraDeployment: MetasMonday, June 17, 13
  24. 24. ConfiableDeployment: MetasMonday, June 17, 13
  25. 25. RollbacksDeployment: MetasMonday, June 17, 13
  26. 26. SindowntimeDeployment: MetasMonday, June 17, 13
  27. 27. Re-usableDeployment: MetasMonday, June 17, 13
  28. 28. EscalableDeployment: MetasMonday, June 17, 13
  29. 29. VerdadesMonday, June 17, 13
  30. 30. Deployment: Verdad #1El despliegue comienza con el desarrollador•Entorno de desarrollo lo másparecido a servidores deproducción•Servidores de test/qa/staging•Vagrant para manejar VMs•Puppet/Chef para manejar lospaquetes y configuración delS.O.Monday, June 17, 13
  31. 31. Deployment: Verdad #2El éxito depende de la configuración del S.O.•Puppet/Chef para manejar lospaquetes y configuración delS.O.•Crear paquetes de S.O. paratodo software de terceros•Configurar tus propiosrepositoriosMonday, June 17, 13
  32. 32. Deployment: Verdad #3El monitoreo incrementa el “uptime”•Herramientas de Monitoreo informan loque sucede en tus servidores (Ganglia,Cacti, Zabbix, etc.)•Agrega monitoreo y metrics a tusaplicaciones (Graphite, StatsD, NewRelic)•Usa los logs inteligentemente (Graylog,Logstash, Kibana)Monday, June 17, 13
  33. 33. Metodologías deDeploymentMonday, June 17, 13
  34. 34. Deployment: Metodologías•Al estilo VIM•Copia con FTP•rsync•source control (svn, git)•Herramientas de Build (ant, phing)•Herramientas especializadas(capistrano, fabric, etc)•Basadas en paquetes (rpm, deb,etc)Monday, June 17, 13
  35. 35. Pasos comunesMonday, June 17, 13
  36. 36. Deployment x Primera vez•Copiar archivos aservidor(es)•Configurar variables en elservidor•Cargar fixtures de DB•Procesar e instalar assets•“Preparar” el cache•“Activar” sitioMonday, June 17, 13
  37. 37. •Copiar archivos aservidor(es)•Aplicar cambios de DB(migraciones)•Procesar e instalar assets•“Preparar” el cache•“Activar” sitioDeployment:Siguientes ocacionesMonday, June 17, 13
  38. 38. •Copiar archivos aservidor(es)•Aplicar cambios de DB(migraciones)•Procesar e instalar assets•“Preparar” el cache•“Activar” sitioDeployment:Siguientes ocacionesMonday, June 17, 13
  39. 39. DesafíosMonday, June 17, 13
  40. 40. Deployment: Desafíos•rsync•git pull•configurar git repo en red local paraahorrar ancho de banda y evitarproblemas de conectividad conservidor git (i.e. github)Desafío:Copiar archivos rápida yconfiablementeSoluciones:Monday, June 17, 13
  41. 41. •usar herramienta que permita ir de 1a n servidores fácilmente (ej.capistrano)•pssh permite enviar comandos enparalelo a multiples servidores•enpaquetar tu aplicación en paquetesde S.O. como .rpm/.deb para instalaren muchos servidores fácilmenteEscalableSoluciones:Deployment: DesafíosDesafío:Monday, June 17, 13
  42. 42. •Prueba!•Crea tags•branches dedicados (master paraproducción)•deploy cada release en un directorionuevoRollbacksSoluciones:Deployment: DesafíosDesafío:Monday, June 17, 13
  43. 43. •usar conexiones basadas en ssh•no guardes contraseñas en sourcecontrol•guarda datos sensibles (passwords)en variables de entornoSeguroSoluciones:Deployment: DesafíosDesafío:Monday, June 17, 13
  44. 44. Migraciones de DB•Doctrine Migrations•Considera usar DBs de documentoscomo MongoDB“Las mejores migraciones son lasque no tienes que hacer”Soluciones:Deployment: DesafíosDesafío:Monday, June 17, 13
  45. 45. Assets estáticos•YUICompress comprime archivos JS yCSS•Activa compresión gzip en el servidor Web•Agrega versiones a los links de archivosestáticos (code.js?v=1)•Assetic cominba multiples archivos en uno•Corre herramientas localmente o servidorde staging, deploy el resultadoSoluciones:Deployment: DesafíosDesafío:Monday, June 17, 13
  46. 46. Caching•Actualiza un servidor mientras otrosprocesan el tráfico•Agrupa servidores y actualiza un grupo ala vez•Ejecuta comandos en “finalize” paralimpiar el cache de APCSoluciones:Deployment: DesafíosDesafío:Monday, June 17, 13
  47. 47. Conflicto de permisos de archivos•Corre Apache/PHP con el mismo usuario•Usa php-fpm en vez de mod_php•Crea usuario “deploy” y agrega elusuario del servidor web al grupo“deploy”•Usa setfacl para permitir que multiplesusuarios puedan escribirSoluciones:Deployment: DesafíosDesafío:Monday, June 17, 13
  48. 48. Otros problemas comunesMonday, June 17, 13
  49. 49. Deployment:Otros problemas comunes• Sistema de archivos ‘Case sensitive’• Configuraciones diferentes• Software de terceros desactualizados• Github caído$ git daemon --base-path=/git/repo/path/ --export-all$ git clone git://127.0.0.1/repohttp://ozmm.org/posts/when_github_goes_down.htmlMonday, June 17, 13
  50. 50. EjemplosMonday, June 17, 13
  51. 51. Deployment:EjemplosEl despliegue continuo más simple!<?phpexec(‘/usr/bin/env -i HOME=/var/www git pull’);echo “Listo!”;hook.phpscreenshotMonday, June 17, 13
  52. 52. Capistrano•Escrito en Ruby•Muy extensible•Gran número de extensiones•Instalación simple en el cliente$ gem install capistranoDeployment:EjemplosMonday, June 17, 13
  53. 53. Capistranoset :application, "myapp" # Nombre de aplicaciónset :deploy_to, "/var/www/myapp"set :user, "deployer"set :use_sudo, false # sudo isnt requiredset :deploy_via, :remote_cacheset :repository, "git@github.com:user/repo.git"role :web, "server.example.com",“server2.example.com”Deployment:EjemplosMonday, June 17, 13
  54. 54. $ cap deploy:setupCapistranoDeployment:EjemplosMonday, June 17, 13
  55. 55. |-- releases`-- shared|-- logs`-- uploadsCapistranoDeployment:EjemplosMonday, June 17, 13
  56. 56. Capistrano$ cap deploy$ cap deploy:migrations$ cap deploy:rollbackDeployment:EjemplosMonday, June 17, 13
  57. 57. |-- current(symlink a releases/20130112)|-- releases| `-- 20130112`-- shared|-- logs`-- uploadsCapistranoDeployment:EjemplosMonday, June 17, 13
  58. 58. Deployment:Otras opciones•Fabric•WePloy•Phing•Magallanes•JenkinsMonday, June 17, 13
  59. 59. HerramientasMonday, June 17, 13
  60. 60. Deployment:HerramientasApp Metrics: StatsD & GraphiteMonday, June 17, 13
  61. 61. Logging: LogstashEnvia logs desde fuentes multiples, lasprocesa, obtiene la fecha correcta, indexa yofrece búsquedaDeployment:HerramientasMonday, June 17, 13
  62. 62. Logging: LogstashConfigura Apache para generar logs en jsonLogFormat "{ "@timestamp": "%{%Y-%m-%dT%H:%M:%S%z}t", "@fields": { "client": "%a","duration_usec": %D, "status": %s, "request": "%U%q", "method": "%m", "referrer": "%{Referer}i" } }" logstash_json# Write our logstash_json logs to logs/access_json.logCustomLog logs/access_json.log logstash_json{ "@timestamp": "2012-08-22T14:35:19-0700", "client": "127.0.0.1","duration_usec": 532, "status": 404, "request": "/favicon.ico","method": "GET", "referrer": "-" }ResultadoDeployment:HerramientasMonday, June 17, 13
  63. 63. Logging: GraylogDeployment:HerramientasMonday, June 17, 13
  64. 64. Logging: KibanaKibana ofrece una forma fácil y amigable devisualizar y buscar datos en tus logsDeployment:HerramientasMonday, June 17, 13
  65. 65. Packaging: fpmhttps://github.com/jordansissel/fpmCrea paquetes para plataformas múltiples(deb, rpm, etc) muy fácilmentefpm -s dir -t rpm -n "myapp" -v 1.0 /var/www/myappfpm -s dir -t deb -a all -n myapp -v 1.0 /etc/apache2/conf.d/my.conf /var/www/myappDeployment:HerramientasMonday, June 17, 13
  66. 66. RepasoMonday, June 17, 13
  67. 67. •Deja de usar FTPMonday, June 17, 13
  68. 68. •Deja de usar FTP•Planea tempranoMonday, June 17, 13
  69. 69. •Deja de usar FTP•Planea temprano•PractícaloMonday, June 17, 13
  70. 70. •Deja de usar FTP•Planea temprano•Practícalo•MonitorizaMonday, June 17, 13
  71. 71. •Deja de usar FTP•Planea temprano•Practícalo•Monitoriza•AUTOMATIZA!Monday, June 17, 13
  72. 72. Preguntas?Transparencias: http://slideshare.net/pgodelTwitter: @pgodelE-mail: pablo@servergrove.comMonday, June 17, 13
  73. 73. Gracias!Transparencias: http://slideshare.net/pgodelTwitter: @pgodelE-mail: pablo@servergrove.comMonday, June 17, 13

×