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

74
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

description

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.

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

Page 1: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

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

Page 2: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

¿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

Page 3: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

Friday, October 4, 13

Page 4: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

Friday, October 4, 13

Page 5: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

⁃ Fundada en 2005

⁃ Proveedor de servicios de hosting especializado en PHP, Symfony, ZendFramework, y otros

⁃ Servidores en Europa y Estados Unidos

⁃Work with us! [email protected]

ServerGrove!

Friday, October 4, 13

Page 6: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

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

Page 7: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

La comunidad es nuestra guia

Friday, October 4, 13

Page 8: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

La comunidad es nuestra guia

Friday, October 4, 13

Page 9: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

Deployment

?Friday, October 4, 13

Page 10: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

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

Page 11: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

Deployment

Es una parte muy importante de la vida

de la aplicación

Friday, October 4, 13

Page 12: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

Deployment

Es una parte muy importante crítica de la

vida de la aplicación

Friday, October 4, 13

Page 13: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

Deployment

No debe ser un pensamiento secundario

Friday, October 4, 13

Page 14: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

Deployment

Debe ser predecible

Friday, October 4, 13

Page 15: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

Deployment

Cuanto más lo hagas mejor funcionará

Friday, October 4, 13

Page 16: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

Friday, October 4, 13

Page 17: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

Metas

Friday, October 4, 13

Page 18: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

Deployment: Metas

Un-click

Friday, October 4, 13

Page 19: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

deployment continuo

Deployment: Metas

Friday, October 4, 13

Page 20: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

Deployment de Aplicaciones PHP

Friday, October 4, 13

Page 21: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

Deployment de Aplicaciones PHP

Friday, October 4, 13

Page 22: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

Deployment de Aplicaciones PHP

Friday, October 4, 13

Page 23: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

A toda hora & lugar

Deployment: Metas

Friday, October 4, 13

Page 24: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

Cualquiera

Deployment: Metas

Friday, October 4, 13

Page 25: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

Confiable

Deployment: Metas

Friday, October 4, 13

Page 26: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

Rollbacks

Deployment: Metas

Friday, October 4, 13

Page 27: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

Sin downtime

Deployment: Metas

Friday, October 4, 13

Page 28: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

Re-usable

Deployment: Metas

Friday, October 4, 13

Page 29: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

Escalable

Deployment: Metas

Friday, October 4, 13

Page 30: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

Verdades

Friday, October 4, 13

Page 31: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

Deployment: Verdad #1El deployment comienza con el desarrollador

• Entorno de desarrollo lo más parecido a servidores de producción

• Servidores de test/qa/stagingVagrant para manejar VMs

• Puppet/Chef para manejar los paquetes y configuración del S.O.

Friday, October 4, 13

Page 32: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

Deployment: Verdad #2El é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

Page 33: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

Deployment: Verdad #3El 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

Page 34: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

Metodologías de Deployment

Friday, October 4, 13

Page 35: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

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

Page 36: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

Pasos comunes

Friday, October 4, 13

Page 37: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

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

Page 38: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

• 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

Page 39: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

• 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

Page 40: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

Desafíos

Friday, October 4, 13

Page 41: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

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

Page 42: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

• 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íosDesafío:

Friday, October 4, 13

Page 43: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

• 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

Page 44: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

• 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

Page 45: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

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

Page 46: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

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

Page 47: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

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

Page 48: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

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

Page 49: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

Otros problemas comunes

Friday, October 4, 13

Page 50: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

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.htmlFriday, October 4, 13

Page 51: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

Ejemplos

Friday, October 4, 13

Page 52: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

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

Page 53: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

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

Page 54: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

Capistrano

set :application, "myapp" # Nombre de aplicaciónset :deploy_to, "/var/www/myapp"

set :user, "deployer"set :use_sudo, false # sudo isn't required

set :deploy_via, :remote_cache set :repository, "[email protected]:user/repo.git"

role :web, "server.example.com", “server2.example.com”

Deployment: Ejemplos

Friday, October 4, 13

Page 55: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

$ cap deploy:setup

Capistrano

Deployment: Ejemplos

Friday, October 4, 13

Page 56: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

|-- releases`-- shared |-- logs `-- uploads

Capistrano

Deployment: Ejemplos

Friday, October 4, 13

Page 57: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

Capistrano

$ cap deploy$ cap deploy:migrations$ cap deploy:rollback

Deployment: Ejemplos

Friday, October 4, 13

Page 58: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

|-- current (symlink a releases/20130112)|-- releases| `-- 20130112`-- shared |-- logs `-- uploads

Capistrano

Deployment: Ejemplos

Friday, October 4, 13

Page 59: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

Deployment:Otras opciones

• Fabric• WePloy• Phing• Magallanes• Jenkins

Friday, October 4, 13

Page 60: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

Herramientas

Friday, October 4, 13

Page 61: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

Deployment: Herramientas

App Metrics: StatsD & Graphite

Friday, October 4, 13

Page 62: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

Logging: LogstashEnvia logs desde fuentes multiples, las procesa, obtiene la fecha correcta, indexa y ofrece búsqueda

Deployment: Herramientas

Friday, October 4, 13

Page 63: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

Logging: Logstash

Configura 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": "-" }

Resultado

Deployment: Herramientas

Friday, October 4, 13

Page 64: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

Logging: KibanaKibana ofrece una forma fácil y amigable de visualizar y buscar datos en tus logs

Deployment: Herramientas

Friday, October 4, 13

Page 65: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

Logging: Graylog

Deployment: Herramientas

Friday, October 4, 13

Page 66: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

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

Page 67: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

Repaso

Friday, October 4, 13

Page 68: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

•Dejá de usar FTP

Friday, October 4, 13

Page 69: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

•Dejá de usar FTP•Planeá temprano

Friday, October 4, 13

Page 70: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

•Dejá de usar FTP•Planeá temprano•Practicalo

Friday, October 4, 13

Page 71: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

•Dejá de usar FTP•Planeá temprano•Practicalo•Monitoreá

Friday, October 4, 13

Page 72: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

•Dejá de usar FTP•Planeá temprano•Practicalo•Monitoreá•AUTOMATIZA!

Friday, October 4, 13

Page 73: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

¿Preguntas?

Transparencias: http://slideshare.net/pgodelTwitter: @pgodel

E-mail: [email protected]

Friday, October 4, 13

Page 74: PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas

Gracias!

Transparencias: http://slideshare.net/pgodelTwitter: @pgodel

E-mail: [email protected]

Friday, October 4, 13