Your SlideShare is downloading. ×
0
Pablo Godel @pgodel - http://phpconference.com.ar
04/Oct/2013 - Buenos Aires, Argentina
Deployment de Aplicaciones
PHP a p...
¿Quién soy?
⁃ Argentino viviendo en Estados Unidos desde 1999
⁃ Desarrollador PHP & Symfony
⁃ Fundador de la primera lista...
Friday, October 4, 13
Friday, October 4, 13
⁃ Fundada en 2005
⁃ Proveedor de servicios de hosting especializado en PHP,
Symfony, ZendFramework, y otros
⁃ Servidores e...
La comunidad es nuestra guia
⁃ Muy activos en la comunidad de Open
Source contribuyendo con código o
patrocinando eventos ...
La comunidad es nuestra guia
Friday, October 4, 13
La comunidad es nuestra guia
Friday, October 4, 13
Deployment
?
Friday, October 4, 13
Deployment
Deployment de Software comprende todas
las actividades que hacen disponible un
sistema de software para su uso....
Deployment
Es una parte muy
importante de la vida
de la aplicación
Friday, October 4, 13
Deployment
Es una parte muy
importante crítica de la
vida de la aplicación
Friday, October 4, 13
Deployment
No debe ser un
pensamiento
secundario
Friday, October 4, 13
Deployment
Debe ser predecible
Friday, October 4, 13
Deployment
Cuanto más lo hagas
mejor funcionará
Friday, October 4, 13
Friday, October 4, 13
Metas
Friday, October 4, 13
Deployment: Metas
Un-click
Friday, October 4, 13
deployment
continuo
Deployment: Metas
Friday, October 4, 13
Deployment de Aplicaciones PHP
Friday, October 4, 13
Deployment de Aplicaciones PHP
Friday, October 4, 13
Deployment de Aplicaciones PHP
Friday, October 4, 13
A toda hora
& lugar
Deployment: Metas
Friday, October 4, 13
Cualquiera
Deployment: Metas
Friday, October 4, 13
Confiable
Deployment: Metas
Friday, October 4, 13
Rollbacks
Deployment: Metas
Friday, October 4, 13
Sin
downtime
Deployment: Metas
Friday, October 4, 13
Re-usable
Deployment: Metas
Friday, October 4, 13
Escalable
Deployment: Metas
Friday, October 4, 13
Verdades
Friday, October 4, 13
Deployment: Verdad #1
El deployment comienza con el desarrollador
•Entorno de desarrollo lo más parecido a
servidores de p...
Deployment: Verdad #2
El éxito depende de la configuración del S.O.
•Puppet/Chef para manejar los paquetes y
configuración d...
Deployment: Verdad #3
El monitoreo incrementa el “uptime”
•Herramientas de Monitoreo informan lo
que sucede en tus servido...
Metodologías de
Deployment
Friday, October 4, 13
Deployment: Metodologías
•Al estilo VIM
•Copia con FTP
•rsync
•source control (svn, git)
•Herramientas de Build (ant, phin...
Pasos comunes
Friday, October 4, 13
Deployment x Primera vez
•Copiar archivos a servidor(es)
•Configurar variables en el servidor
•Cargar fixtures de DB
•Proces...
•Copiar archivos a servidor(es)
•Aplicar cambios de DB (migraciones)
•Procesar e instalar assets
•“Preparar” el cache
•“Ac...
•Copiar archivos a servidor(es)
•Aplicar cambios de DB (migraciones)
•Procesar e instalar assets
•“Preparar” el cache
•“Ac...
Desafíos
Friday, October 4, 13
Deployment: Desafíos
•rsync
•git pull
•configurar git repo en red local para
ahorrar ancho de banda y evitar
problemas de c...
•usar herramienta que permita ir de 1 a n
servidores fácilmente (ej. capistrano)
•pssh permite enviar comandos en
paralelo...
•Probá primero!
•Creá tags
•branches dedicados (master para
producción)
•deploy cada release en un directorio
nuevo
Rollba...
•usar conexiones basadas en ssh
•no guardes contraseñas en source control
•guarda datos sensibles (passwords) en
variables...
Migraciones de DB
•Doctrine Migrations
•Considerá usar DBs de documentos
como MongoDB
“Las mejores migraciones son las que...
Assets estáticos
•YUICompress comprime archivos JS y CSS
•Activá compresión gzip en el servidor Web
•Agregá versiones a lo...
Caching
•Actualizá un servidor mientras otros
procesan el tráfico
•Agrupá servidores y actualizá un grupo a la
vez
•Ejecutá...
Conflicto de permisos de archivos
•Corré Apache/PHP con el mismo usuario
•Usá php-fpm en vez de mod_php
•Creá usuario “depl...
Otros problemas comunes
Friday, October 4, 13
Deployment:
Otros problemas comunes
• Sistema de archivos ‘Case sensitive’
• Configuraciones diferentes
• Software de terce...
Ejemplos
Friday, October 4, 13
Deployment:
Ejemplos
El deployment continuo más simple!
<?php
exec(‘/usr/bin/env -i HOME=/var/www git pull’);
echo “Listo!...
Capistrano
•Escrito en Ruby
•Muy extensible
•Gran número de extensiones
•Instalación simple en el cliente
$ gem install ca...
Capistrano
set :application, "myapp" # Nombre de aplicación
set :deploy_to, "/var/www/myapp"
set :user, "deployer"
set :us...
$ cap deploy:setup
Capistrano
Deployment:
Ejemplos
Friday, October 4, 13
|-- releases
`-- shared
|-- logs
`-- uploads
Capistrano
Deployment:
Ejemplos
Friday, October 4, 13
Capistrano
$ cap deploy
$ cap deploy:migrations
$ cap deploy:rollback
Deployment:
Ejemplos
Friday, October 4, 13
|-- current
(symlink a releases/20130112)
|-- releases
| `-- 20130112
`-- shared
|-- logs
`-- uploads
Capistrano
Deploymen...
Deployment:
Otras opciones
•Fabric
•WePloy
•Phing
•Magallanes
•Jenkins
Friday, October 4, 13
Herramientas
Friday, October 4, 13
Deployment:
Herramientas
App Metrics: StatsD & Graphite
Friday, October 4, 13
Logging: Logstash
Envia logs desde fuentes multiples, las
procesa, obtiene la fecha correcta, indexa y
ofrece búsqueda
Dep...
Logging: Logstash
Configura Apache para generar logs en json
LogFormat "{ "@timestamp": "%{%Y-%m-%dT%H:%M:%S%z}t", "@fields...
Logging: Kibana
Kibana ofrece una forma fácil y amigable de
visualizar y buscar datos en tus logs
Deployment:
Herramientas...
Logging: Graylog
Deployment:
Herramientas
Friday, October 4, 13
Packaging: fpm
https://github.com/jordansissel/fpm
Crea paquetes para plataformas múltiples
(deb, rpm, etc) muy fácilmente...
Repaso
Friday, October 4, 13
•Dejá de usar FTP
Friday, October 4, 13
•Dejá de usar FTP
•Planeá temprano
Friday, October 4, 13
•Dejá de usar FTP
•Planeá temprano
•Practicalo
Friday, October 4, 13
•Dejá de usar FTP
•Planeá temprano
•Practicalo
•Monitoreá
Friday, October 4, 13
•Dejá de usar FTP
•Planeá temprano
•Practicalo
•Monitoreá
•AUTOMATIZA!
Friday, October 4, 13
¿Preguntas?
Transparencias: http://slideshare.net/pgodel
Twitter: @pgodel
E-mail: pablo@servergrove.com
Friday, October 4,...
Gracias!
Transparencias: http://slideshare.net/pgodel
Twitter: @pgodel
E-mail: pablo@servergrove.com
Friday, October 4, 13
Upcoming SlideShare
Loading in...5
×

PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

1,399

Published on

Las aplicaciones web se están complicando cada vez más, por lo que el deployment ya no es cuestión de transferir archivos a través de FTP. En esta charla analizaremos los diferentes desafíos a la hora de hacer deploy de nuestras aplicaciones PHP de forma efectiva, segura y consistente con las últimas herramientas y técnicas.

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,399
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
21
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas"

  1. 1. Pablo Godel @pgodel - http://phpconference.com.ar 04/Oct/2013 - Buenos Aires, Argentina Deployment de Aplicaciones PHP a prueba de balas Friday, October 4, 13
  2. 2. ¿Quién soy? ⁃ Argentino viviendo en Estados Unidos desde 1999 ⁃ Desarrollador PHP & Symfony ⁃ Fundador de la primera lista de discusión de PHP de habla hispana - Socio fundador de ServerGrove ⁃ Amante de la parrilla Friday, October 4, 13
  3. 3. Friday, October 4, 13
  4. 4. Friday, October 4, 13
  5. 5. ⁃ Fundada en 2005 ⁃ Proveedor de servicios de hosting especializado en PHP, Symfony, ZendFramework, y otros ⁃ Servidores en Europa y Estados Unidos ⁃ Work with us! jobs@servergrove.com ServerGrove! Friday, October 4, 13
  6. 6. La comunidad es nuestra guia ⁃ Muy activos en la comunidad de Open Source contribuyendo con código o patrocinando eventos y grupos de usuarios Friday, October 4, 13
  7. 7. La comunidad es nuestra guia Friday, October 4, 13
  8. 8. La comunidad es nuestra guia Friday, October 4, 13
  9. 9. Deployment ? Friday, October 4, 13
  10. 10. Deployment Deployment de Software comprende todas las actividades que hacen disponible un sistema de software para su uso. http://en.wikipedia.org/wiki/Software_deployment Friday, October 4, 13
  11. 11. Deployment Es una parte muy importante de la vida de la aplicación Friday, October 4, 13
  12. 12. Deployment Es una parte muy importante crítica de la vida de la aplicación Friday, October 4, 13
  13. 13. Deployment No debe ser un pensamiento secundario Friday, October 4, 13
  14. 14. Deployment Debe ser predecible Friday, October 4, 13
  15. 15. Deployment Cuanto más lo hagas mejor funcionará Friday, October 4, 13
  16. 16. Friday, October 4, 13
  17. 17. Metas Friday, October 4, 13
  18. 18. Deployment: Metas Un-click Friday, October 4, 13
  19. 19. deployment continuo Deployment: Metas Friday, October 4, 13
  20. 20. Deployment de Aplicaciones PHP Friday, October 4, 13
  21. 21. Deployment de Aplicaciones PHP Friday, October 4, 13
  22. 22. Deployment de Aplicaciones PHP Friday, October 4, 13
  23. 23. A toda hora & lugar Deployment: Metas Friday, October 4, 13
  24. 24. Cualquiera Deployment: Metas Friday, October 4, 13
  25. 25. Confiable Deployment: Metas Friday, October 4, 13
  26. 26. Rollbacks Deployment: Metas Friday, October 4, 13
  27. 27. Sin downtime Deployment: Metas Friday, October 4, 13
  28. 28. Re-usable Deployment: Metas Friday, October 4, 13
  29. 29. Escalable Deployment: Metas Friday, October 4, 13
  30. 30. Verdades Friday, October 4, 13
  31. 31. Deployment: Verdad #1 El deployment comienza con el desarrollador •Entorno de desarrollo lo más parecido a servidores de producción •Servidores de test/qa/staging Vagrant para manejar VMs •Puppet/Chef para manejar los paquetes y configuración del S.O. Friday, October 4, 13
  32. 32. Deployment: Verdad #2 El éxito depende de la configuración del S.O. •Puppet/Chef para manejar los paquetes y configuración del S.O. •Crear paquetes de S.O. para todo software de terceros •Configurar tus propios repositorios Friday, October 4, 13
  33. 33. Deployment: Verdad #3 El monitoreo incrementa el “uptime” •Herramientas de Monitoreo informan lo que sucede en tus servidores (Ganglia, Cacti, Zabbix, etc.) •Agregá monitoreo y metrics a tus aplicaciones (Graphite, StatsD, New Relic) •Usá los logs inteligentemente (Graylog, Logstash, Kibana) Friday, October 4, 13
  34. 34. Metodologías de Deployment Friday, October 4, 13
  35. 35. 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) Friday, October 4, 13
  36. 36. Pasos comunes Friday, October 4, 13
  37. 37. Deployment x Primera vez •Copiar archivos a servidor(es) •Configurar variables en el servidor •Cargar fixtures de DB •Procesar e instalar assets •“Preparar” el cache •“Activar” sitio Friday, October 4, 13
  38. 38. •Copiar archivos a servidor(es) •Aplicar cambios de DB (migraciones) •Procesar e instalar assets •“Preparar” el cache •“Activar” sitio Deployment: Siguientes ocaciones Friday, October 4, 13
  39. 39. •Copiar archivos a servidor(es) •Aplicar cambios de DB (migraciones) •Procesar e instalar assets •“Preparar” el cache •“Activar” sitio Deployment: Siguientes ocaciones Friday, October 4, 13
  40. 40. Desafíos Friday, October 4, 13
  41. 41. Deployment: Desafíos •rsync •git pull •configurar git repo en red local para ahorrar ancho de banda y evitar problemas de conectividad con servidor git (i.e. github) Desafío: Copiar archivos rápida y confiablemente Soluciones: Friday, October 4, 13
  42. 42. •usar herramienta que permita ir de 1 a n servidores fácilmente (ej. capistrano) •pssh permite enviar comandos en paralelo a multiples servidores •empaquetar tu aplicación en paquetes de S.O. como .rpm/.deb para instalar en muchos servidores fácilmente Escalable Soluciones: Deployment: Desafíos Desafío: Friday, October 4, 13
  43. 43. •Probá primero! •Creá tags •branches dedicados (master para producción) •deploy cada release en un directorio nuevo Rollbacks Soluciones: Deployment: Desafíos Desafío: Friday, October 4, 13
  44. 44. •usar conexiones basadas en ssh •no guardes contraseñas en source control •guarda datos sensibles (passwords) en variables de entorno Seguro Soluciones: Deployment: Desafíos Desafío: Friday, October 4, 13
  45. 45. Migraciones de DB •Doctrine Migrations •Considerá usar DBs de documentos como MongoDB “Las mejores migraciones son las que no tenés que hacer” Soluciones: Deployment: Desafíos Desafío: Friday, October 4, 13
  46. 46. Assets estáticos •YUICompress comprime archivos JS y CSS •Activá compresión gzip en el servidor Web •Agregá versiones a los links de archivos estáticos (code.js?v=1) •Assetic combina multiples archivos en uno •Corré herramientas localmente o servidor de staging, deploy el resultado Soluciones: Deployment: Desafíos Desafío: Friday, October 4, 13
  47. 47. Caching •Actualizá un servidor mientras otros procesan el tráfico •Agrupá servidores y actualizá un grupo a la vez •Ejecutá comandos en “finalize” para limpiar el cache de APC Soluciones: Deployment: Desafíos Desafío: Friday, October 4, 13
  48. 48. Conflicto de permisos de archivos •Corré Apache/PHP con el mismo usuario •Usá php-fpm en vez de mod_php •Creá usuario “deploy” y agregá el usuario del servidor web al grupo “deploy” •Usá setfacl para permitir que multiples usuarios puedan escribir Soluciones: Deployment: Desafíos Desafío: Friday, October 4, 13
  49. 49. Otros problemas comunes Friday, October 4, 13
  50. 50. 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/repo http://ozmm.org/posts/when_github_goes_down.html Friday, October 4, 13
  51. 51. Ejemplos Friday, October 4, 13
  52. 52. Deployment: Ejemplos El deployment continuo más simple! <?php exec(‘/usr/bin/env -i HOME=/var/www git pull’); echo “Listo!”; hook.php screenshot Friday, October 4, 13
  53. 53. Capistrano •Escrito en Ruby •Muy extensible •Gran número de extensiones •Instalación simple en el cliente $ gem install capistrano Deployment: Ejemplos Friday, October 4, 13
  54. 54. Capistrano set :application, "myapp" # Nombre de aplicación set :deploy_to, "/var/www/myapp" set :user, "deployer" set :use_sudo, false # sudo isn't required set :deploy_via, :remote_cache set :repository, "git@github.com:user/repo.git" role :web, "server.example.com",“server2.example.com” Deployment: Ejemplos Friday, October 4, 13
  55. 55. $ cap deploy:setup Capistrano Deployment: Ejemplos Friday, October 4, 13
  56. 56. |-- releases `-- shared |-- logs `-- uploads Capistrano Deployment: Ejemplos Friday, October 4, 13
  57. 57. Capistrano $ cap deploy $ cap deploy:migrations $ cap deploy:rollback Deployment: Ejemplos Friday, October 4, 13
  58. 58. |-- current (symlink a releases/20130112) |-- releases | `-- 20130112 `-- shared |-- logs `-- uploads Capistrano Deployment: Ejemplos Friday, October 4, 13
  59. 59. Deployment: Otras opciones •Fabric •WePloy •Phing •Magallanes •Jenkins Friday, October 4, 13
  60. 60. Herramientas Friday, October 4, 13
  61. 61. Deployment: Herramientas App Metrics: StatsD & Graphite Friday, October 4, 13
  62. 62. Logging: Logstash Envia logs desde fuentes multiples, las procesa, obtiene la fecha correcta, indexa y ofrece búsqueda Deployment: Herramientas Friday, October 4, 13
  63. 63. Logging: Logstash Configura Apache para generar logs en json LogFormat "{ "@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.log CustomLog 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": "-" } Resultado Deployment: Herramientas Friday, October 4, 13
  64. 64. Logging: Kibana Kibana ofrece una forma fácil y amigable de visualizar y buscar datos en tus logs Deployment: Herramientas Friday, October 4, 13
  65. 65. Logging: Graylog Deployment: Herramientas Friday, October 4, 13
  66. 66. Packaging: fpm https://github.com/jordansissel/fpm Crea paquetes para plataformas múltiples (deb, rpm, etc) muy fácilmente fpm -s dir -t rpm -n "myapp" -v 1.0 /var/www/myapp fpm -s dir -t deb -a all -n myapp -v 1.0 /etc/apache2/ conf.d/my.conf /var/www/myapp Deployment: Herramientas Friday, October 4, 13
  67. 67. Repaso Friday, October 4, 13
  68. 68. •Dejá de usar FTP Friday, October 4, 13
  69. 69. •Dejá de usar FTP •Planeá temprano Friday, October 4, 13
  70. 70. •Dejá de usar FTP •Planeá temprano •Practicalo Friday, October 4, 13
  71. 71. •Dejá de usar FTP •Planeá temprano •Practicalo •Monitoreá Friday, October 4, 13
  72. 72. •Dejá de usar FTP •Planeá temprano •Practicalo •Monitoreá •AUTOMATIZA! Friday, October 4, 13
  73. 73. ¿Preguntas? Transparencias: http://slideshare.net/pgodel Twitter: @pgodel E-mail: pablo@servergrove.com Friday, October 4, 13
  74. 74. Gracias! Transparencias: http://slideshare.net/pgodel Twitter: @pgodel E-mail: pablo@servergrove.com Friday, October 4, 13
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×