php conference argentina 2013 - deployment de aplicaciones php a prueba de balas
Post on 05-Dec-2014
1.608 Views
Preview:
DESCRIPTION
TRANSCRIPT
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
¿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
Friday, October 4, 13
Friday, October 4, 13
⁃ 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
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
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.
http://en.wikipedia.org/wiki/Software_deployment
Friday, October 4, 13
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 #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
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
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
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, phing)• Herramientas especializadas
(capistrano, fabric, etc)• Basadas en paquetes (rpm, deb, etc)
Friday, October 4, 13
Pasos comunes
Friday, October 4, 13
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
• 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
• 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
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 conectividad con servidor git (i.e. github)
Desafío:Copiar archivos rápida y confiablemente
Soluciones:
Friday, October 4, 13
• 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
• 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
• 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
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
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
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
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
Otros problemas comunes
Friday, October 4, 13
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
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!”;
hook.php
screenshot
Friday, October 4, 13
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
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, "git@github.com:user/repo.git"
role :web, "server.example.com", “server2.example.com”
Deployment: Ejemplos
Friday, October 4, 13
$ 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
Deployment: Ejemplos
Friday, October 4, 13
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: LogstashEnvia logs desde fuentes multiples, las procesa, obtiene la fecha correcta, indexa y ofrece búsqueda
Deployment: Herramientas
Friday, October 4, 13
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
Logging: KibanaKibana ofrece una forma fácil y amigable de visualizar y buscar datos en tus logs
Deployment: Herramientas
Friday, October 4, 13
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
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
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/pgodelTwitter: @pgodel
E-mail: pablo@servergrove.com
Friday, October 4, 13
Gracias!
Transparencias: http://slideshare.net/pgodelTwitter: @pgodel
E-mail: pablo@servergrove.com
Friday, October 4, 13
top related