• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas
 

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

on

  • 1,315 views

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 ...

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.

Statistics

Views

Total Views
1,315
Views on SlideShare
1,264
Embed Views
51

Actions

Likes
0
Downloads
16
Comments
0

1 Embed 51

https://twitter.com 51

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas Presentation 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 #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
    • 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
    • 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
    • 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íos Desafí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.html Friday, 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ó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
    • $ 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: Logstash Envia 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 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
    • Logging: Kibana Kibana 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/pgodel Twitter: @pgodel E-mail: pablo@servergrove.com Friday, October 4, 13
    • Gracias! Transparencias: http://slideshare.net/pgodel Twitter: @pgodel E-mail: pablo@servergrove.com Friday, October 4, 13