despliegue de aplicaciones php

Post on 13-Jun-2015

966 Views

Category:

Technology

8 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Monday, June 17, 13

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

Monday, June 17, 13

Monday, June 17, 13

⁃ 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

⁃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

Deployment

?Monday, June 17, 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

Monday, June 17, 13

Deployment

Es una parte muy importante de la vida

de la aplicación

Monday, June 17, 13

Deployment

Es una parte muy importante crítica de la

vida de la aplicación

Monday, June 17, 13

Deployment

No debe ser un pensamiento secundario

Monday, June 17, 13

Deployment

Debe ser predecible

Monday, June 17, 13

Deployment

Cuanto más lo hagas mejor funcionará

Monday, June 17, 13

Monday, June 17, 13

Metas

Monday, June 17, 13

Deployment: Metas

Un-click

Monday, June 17, 13

despliegue continuo

Deployment: Metas

Monday, June 17, 13

Despliegue de Aplicaciones PHP

Monday, June 17, 13

Despliegue de Aplicaciones PHP

Monday, June 17, 13

Despliegue de Aplicaciones PHP

Monday, June 17, 13

A toda hora & lugar

Deployment: Metas

Monday, June 17, 13

Cualquiera

Deployment: Metas

Monday, June 17, 13

Confiable

Deployment: Metas

Monday, June 17, 13

Rollbacks

Deployment: Metas

Monday, June 17, 13

Sin downtime

Deployment: Metas

Monday, June 17, 13

Re-usable

Deployment: Metas

Monday, June 17, 13

Escalable

Deployment: Metas

Monday, June 17, 13

Verdades

Monday, June 17, 13

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

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

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

Metodologías de Deployment

Monday, June 17, 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)

Monday, June 17, 13

Pasos comunes

Monday, June 17, 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

Monday, June 17, 13

•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

•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

Desafíos

Monday, June 17, 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:

Monday, June 17, 13

•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

•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

•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

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

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

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

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

Otros problemas comunes

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

Ejemplos

Monday, June 17, 13

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

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

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

Monday, June 17, 13

$ cap deploy:setup

Capistrano

Deployment: Ejemplos

Monday, June 17, 13

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

Capistrano

Deployment: Ejemplos

Monday, June 17, 13

Capistrano

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

Deployment: Ejemplos

Monday, June 17, 13

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

Capistrano

Deployment: Ejemplos

Monday, June 17, 13

Deployment:Otras opciones

•Fabric•WePloy•Phing•Magallanes•Jenkins

Monday, June 17, 13

Herramientas

Monday, June 17, 13

Deployment: Herramientas

App Metrics: StatsD & Graphite

Monday, June 17, 13

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

Deployment: Herramientas

Monday, June 17, 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

Monday, June 17, 13

Logging: Graylog

Deployment: Herramientas

Monday, June 17, 13

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

Deployment: Herramientas

Monday, June 17, 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

Monday, June 17, 13

Repaso

Monday, June 17, 13

•Deja de usar FTP

Monday, June 17, 13

•Deja de usar FTP•Planea temprano

Monday, June 17, 13

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

Monday, June 17, 13

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

Monday, June 17, 13

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

Monday, June 17, 13

Preguntas?

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

E-mail: pablo@servergrove.com

Monday, June 17, 13

Gracias!

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

E-mail: pablo@servergrove.com

Monday, June 17, 13

top related