despliegue de aplicaciones php

73
Monday, June 17, 13

Upload: alicantephp

Post on 13-Jun-2015

966 views

Category:

Technology


8 download

TRANSCRIPT

Page 1: Despliegue de aplicaciones PHP

Monday, June 17, 13

Page 2: Despliegue de aplicaciones PHP

Monday, June 17, 13

Page 3: Despliegue de aplicaciones PHP

¿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 parrillaMonday, June 17, 13

Page 4: Despliegue de aplicaciones PHP

Monday, June 17, 13

Page 5: Despliegue de aplicaciones PHP

Monday, June 17, 13

Page 6: Despliegue de aplicaciones PHP

⁃ Fundada en 2005

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

⁃Servidores en Europa y Estados Unidos

ServerGrove!

Monday, June 17, 13

Page 7: Despliegue de aplicaciones PHP

⁃Muy activos en la comunidad de Open Source contribuyendo con código o patrocinando eventos y grupos de usuarios

La comunidad es nuestra guia

Alicante PHP

Monday, June 17, 13

Page 8: Despliegue de aplicaciones PHP

Deployment

?Monday, June 17, 13

Page 9: Despliegue de aplicaciones PHP

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

Monday, June 17, 13

Page 10: Despliegue de aplicaciones PHP

Deployment

Es una parte muy importante de la vida

de la aplicación

Monday, June 17, 13

Page 11: Despliegue de aplicaciones PHP

Deployment

Es una parte muy importante crítica de la

vida de la aplicación

Monday, June 17, 13

Page 12: Despliegue de aplicaciones PHP

Deployment

No debe ser un pensamiento secundario

Monday, June 17, 13

Page 13: Despliegue de aplicaciones PHP

Deployment

Debe ser predecible

Monday, June 17, 13

Page 14: Despliegue de aplicaciones PHP

Deployment

Cuanto más lo hagas mejor funcionará

Monday, June 17, 13

Page 15: Despliegue de aplicaciones PHP

Monday, June 17, 13

Page 16: Despliegue de aplicaciones PHP

Metas

Monday, June 17, 13

Page 17: Despliegue de aplicaciones PHP

Deployment: Metas

Un-click

Monday, June 17, 13

Page 18: Despliegue de aplicaciones PHP

despliegue continuo

Deployment: Metas

Monday, June 17, 13

Page 19: Despliegue de aplicaciones PHP

Despliegue de Aplicaciones PHP

Monday, June 17, 13

Page 20: Despliegue de aplicaciones PHP

Despliegue de Aplicaciones PHP

Monday, June 17, 13

Page 21: Despliegue de aplicaciones PHP

Despliegue de Aplicaciones PHP

Monday, June 17, 13

Page 22: Despliegue de aplicaciones PHP

A toda hora & lugar

Deployment: Metas

Monday, June 17, 13

Page 23: Despliegue de aplicaciones PHP

Cualquiera

Deployment: Metas

Monday, June 17, 13

Page 24: Despliegue de aplicaciones PHP

Confiable

Deployment: Metas

Monday, June 17, 13

Page 25: Despliegue de aplicaciones PHP

Rollbacks

Deployment: Metas

Monday, June 17, 13

Page 26: Despliegue de aplicaciones PHP

Sin downtime

Deployment: Metas

Monday, June 17, 13

Page 27: Despliegue de aplicaciones PHP

Re-usable

Deployment: Metas

Monday, June 17, 13

Page 28: Despliegue de aplicaciones PHP

Escalable

Deployment: Metas

Monday, June 17, 13

Page 29: Despliegue de aplicaciones PHP

Verdades

Monday, June 17, 13

Page 30: Despliegue de aplicaciones PHP

Deployment: Verdad #1El despliegue 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.

Monday, June 17, 13

Page 31: Despliegue de aplicaciones PHP

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

Monday, June 17, 13

Page 32: Despliegue de aplicaciones PHP

Deployment: Verdad #3El monitoreo incrementa el “uptime”

•Herramientas de Monitoreo informan lo que sucede en tus servidores (Ganglia, Cacti, Zabbix, etc.)

•Agrega monitoreo y metrics a tus aplicaciones (Graphite, StatsD, New Relic)

•Usa los logs inteligentemente (Graylog, Logstash, Kibana)

Monday, June 17, 13

Page 33: Despliegue de aplicaciones PHP

Metodologías de Deployment

Monday, June 17, 13

Page 34: Despliegue de aplicaciones PHP

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

Page 35: Despliegue de aplicaciones PHP

Pasos comunes

Monday, June 17, 13

Page 36: Despliegue de aplicaciones PHP

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

Monday, June 17, 13

Page 37: Despliegue de aplicaciones PHP

•Copiar archivos a servidor(es)

•Aplicar cambios de DB (migraciones)

•Procesar e instalar assets•“Preparar” el cache•“Activar” sitio

Deployment: Siguientes ocaciones

Monday, June 17, 13

Page 38: Despliegue de aplicaciones PHP

•Copiar archivos a servidor(es)

•Aplicar cambios de DB (migraciones)•Procesar e instalar assets•“Preparar” el cache•“Activar” sitio

Deployment: Siguientes ocaciones

Monday, June 17, 13

Page 39: Despliegue de aplicaciones PHP

Desafíos

Monday, June 17, 13

Page 40: Despliegue de aplicaciones PHP

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:

Monday, June 17, 13

Page 41: Despliegue de aplicaciones PHP

•usar herramienta que permita ir de 1 a n servidores fácilmente (ej. capistrano)

•pssh permite enviar comandos en paralelo a multiples servidores

•enpaquetar tu aplicación en paquetes de S.O. como .rpm/.deb para instalar en muchos servidores fácilmente

EscalableSoluciones:

Deployment: DesafíosDesafío:

Monday, June 17, 13

Page 42: Despliegue de aplicaciones PHP

•Prueba!•Crea tags•branches dedicados (master para

producción)•deploy cada release en un directorio

nuevo

RollbacksSoluciones:

Deployment: DesafíosDesafío:

Monday, June 17, 13

Page 43: Despliegue de aplicaciones PHP

•usar conexiones basadas en ssh•no guardes contraseñas en source

control•guarda datos sensibles (passwords)

en variables de entorno

SeguroSoluciones:

Deployment: DesafíosDesafío:

Monday, June 17, 13

Page 44: Despliegue de aplicaciones PHP

Migraciones de DB

•Doctrine Migrations•Considera usar DBs de documentos

como MongoDB

“Las mejores migraciones son las que no tienes que hacer”

Soluciones:

Deployment: DesafíosDesafío:

Monday, June 17, 13

Page 45: Despliegue de aplicaciones PHP

Assets estáticos

•YUICompress comprime archivos JS y CSS

•Activa compresión gzip en el servidor Web•Agrega versiones a los links de archivos

estáticos (code.js?v=1)•Assetic cominba multiples archivos en uno•Corre herramientas localmente o servidor

de staging, deploy el resultado

Soluciones:

Deployment: DesafíosDesafío:

Monday, June 17, 13

Page 46: Despliegue de aplicaciones PHP

Caching

•Actualiza un servidor mientras otros procesan el tráfico

•Agrupa servidores y actualiza un grupo a la vez

•Ejecuta comandos en “finalize” para limpiar el cache de APC

Soluciones:

Deployment: DesafíosDesafío:

Monday, June 17, 13

Page 47: Despliegue de aplicaciones PHP

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 el

usuario del servidor web al grupo “deploy”

•Usa setfacl para permitir que multiples usuarios puedan escribir

Soluciones:

Deployment: DesafíosDesafío:

Monday, June 17, 13

Page 48: Despliegue de aplicaciones PHP

Otros problemas comunes

Monday, June 17, 13

Page 49: Despliegue de aplicaciones PHP

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.htmlMonday, June 17, 13

Page 50: Despliegue de aplicaciones PHP

Ejemplos

Monday, June 17, 13

Page 51: Despliegue de aplicaciones PHP

Deployment: Ejemplos

El despliegue continuo más simple!

<?php

exec(‘/usr/bin/env -i HOME=/var/www git pull’);echo “Listo!”;

hook.php

screenshot

Monday, June 17, 13

Page 52: Despliegue de aplicaciones PHP

Capistrano•Escrito en Ruby•Muy extensible•Gran número de extensiones• Instalación simple en el cliente

$ gem install capistrano

Deployment: Ejemplos

Monday, June 17, 13

Page 53: Despliegue de aplicaciones PHP

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

Monday, June 17, 13

Page 54: Despliegue de aplicaciones PHP

$ cap deploy:setup

Capistrano

Deployment: Ejemplos

Monday, June 17, 13

Page 55: Despliegue de aplicaciones PHP

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

Capistrano

Deployment: Ejemplos

Monday, June 17, 13

Page 56: Despliegue de aplicaciones PHP

Capistrano

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

Deployment: Ejemplos

Monday, June 17, 13

Page 57: Despliegue de aplicaciones PHP

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

Capistrano

Deployment: Ejemplos

Monday, June 17, 13

Page 58: Despliegue de aplicaciones PHP

Deployment:Otras opciones

•Fabric•WePloy•Phing•Magallanes•Jenkins

Monday, June 17, 13

Page 59: Despliegue de aplicaciones PHP

Herramientas

Monday, June 17, 13

Page 60: Despliegue de aplicaciones PHP

Deployment: Herramientas

App Metrics: StatsD & Graphite

Monday, June 17, 13

Page 61: Despliegue de aplicaciones PHP

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

Deployment: Herramientas

Monday, June 17, 13

Page 62: Despliegue de aplicaciones PHP

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

Monday, June 17, 13

Page 63: Despliegue de aplicaciones PHP

Logging: Graylog

Deployment: Herramientas

Monday, June 17, 13

Page 64: Despliegue de aplicaciones PHP

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

Deployment: Herramientas

Monday, June 17, 13

Page 65: Despliegue de aplicaciones PHP

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

Monday, June 17, 13

Page 66: Despliegue de aplicaciones PHP

Repaso

Monday, June 17, 13

Page 67: Despliegue de aplicaciones PHP

•Deja de usar FTP

Monday, June 17, 13

Page 68: Despliegue de aplicaciones PHP

•Deja de usar FTP•Planea temprano

Monday, June 17, 13

Page 69: Despliegue de aplicaciones PHP

•Deja de usar FTP•Planea temprano•Practícalo

Monday, June 17, 13

Page 70: Despliegue de aplicaciones PHP

•Deja de usar FTP•Planea temprano•Practícalo•Monitoriza

Monday, June 17, 13

Page 71: Despliegue de aplicaciones PHP

•Deja de usar FTP•Planea temprano•Practícalo•Monitoriza•AUTOMATIZA!

Monday, June 17, 13

Page 72: Despliegue de aplicaciones PHP

Preguntas?

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

E-mail: [email protected]

Monday, June 17, 13

Page 73: Despliegue de aplicaciones PHP

Gracias!

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

E-mail: [email protected]

Monday, June 17, 13