SlideShare una empresa de Scribd logo
1 de 39
Descargar para leer sin conexión
Herramienta de despliegue PHP
sencilla y poderosa.
Javier Núñez
@javiernuber
javiernuber@gmail.com
Javier Núñez
Software developer
Solucionex
javiernuber@gmail.com
@javiernuber
INTRODUCCIÓN
DEPLOYMENT
Software deployment is all of the
activities that make a software system
available for use.
“Actividad imprescindible en el
desarrollo de un producto de
software
“Seguro que esta actividad la repites
muchas veces
“
AUTOMATIZA!!
Cómo debería ser una
herramienta de despliegue
○  Sencilla
○  Fiable y segura
○  Rollbacks
○  Registro de operaciones y errores (logs)
○  Reusable
○  Escalable
Métodos de despliegue
○  FTP
○  Rsync
○  Control de versiones (GIT, SVN)
○  Build Tools (Ant, Phing, Jenking)
○  Herramientas de despligue (Capistrano/Capifony, Magallanes,
Deployer, Rocketeer, Idephix)
○  IT Automation tools (Ansible, Pupper, Chef)
Métodos de despliegue
○  FTP
○  Rsync
○  Control de versiones (GIT, SVN)
○  Build Tools (Ant, Phing, Jenking)
○  Herramientas de despligue (Capistrano/Capifony, Magallanes,
Deployer, Rocketeer, Idephix)
○  IT Automation tools (Ansible, Pupper, Chef)
MAGALLANES
¿QUE ES MAGALLANES?
Magallanes es una herramienta de despliegue
de aplicaciones PHP escrita en PHP. Muy fácil
de usar, configurar y ampliar.
Características
○  100% PHP (>= PHP 5.3)
○  Configurable
○  Permite definir múltiples entornos
○  No se apega a ningún framework
○  Con utilidades de serie para algunos frameworks
○  Extensible
Características
○  100% PHP (>= PHP 5.3)
○  Configurable
○  Permite definir múltiples entornos
○  No se apega a ningún framework
○  Con utilidades de serie para algunos frameworks
○  Extensible
Creador: Andrés Montañez
@andres_montañez
Instalación
wget	
  http://download.magephp.com/magallanes.latest.tar.gz	
  -­‐O	
  magallanes.tar.gz	
  
tar	
  xfz	
  magallanes.tar.gz	
  
cd	
  magallanes	
  
bin/mage	
  install	
  -­‐-­‐systemWide	
  -­‐-­‐installDir=/opt/magallanes	
  
En el parámetro --installDir indicamos el directorio de instalación.
Con el parámetro --systemWide se creará un enlace simbólico al comando mage en /
usr/bin/mage
mage	
  version	
  
Ya tenemos disponible el comando mage en nuestra consola
Instalación
Instalación con Composer
{	
  
	
  	
  	
  	
  "require-­‐dev":	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  "andres-­‐montanez/magallanes":	
  "~1.0.1"	
  
	
  	
  	
  	
  }	
  
}	
  
Actualizamos los vendors
php	
  composer	
  update	
  andres-­‐montanez/magallanes	
  
bin/mage	
  version	
  
Inicialización
Primero inicializamos el proyecto
Este comando genera en el proyecto la carpeta .mage con la definición del
proyecto y los entornos.
mage	
  init	
  -­‐-­‐name=“PHP	
  Cáceres	
  App"	
  -­‐-­‐email=”hola@phpcaceres.es"	
  
general.yml
#	
  global	
  settings	
  
name:	
  PHP	
  Cáceres	
  
email:	
  javiernuber@gmail.com	
  
notifications:	
  false	
  
logging:	
  true	
  
maxlogs:	
  30	
  
ssh_needs_tty:	
  false	
  
Environment
Un entorno define cómo se hará el despliegue de nuestra aplicación.
Ejemplos clásicos de entornos son production, staging, o testing.
mage	
  add	
  environment	
  -­‐-­‐name="production"	
  	
  
La ejecución del comando genera un fichero llamado production.yml
dentro de la carpeta .mage/environment
Crear un entorno es tan fácil como lanzar el siguiente comando:
mage	
  list	
  environments	
  
Para ver los entornos existentes
production.yml
#production	
  
deployment:	
  
	
  	
  user:	
  phpcaceres	
  
	
  	
  from:	
  ./	
  
	
  	
  to:	
  /var/www/vhosts/www	
  
	
  	
  excludes:	
  
	
  	
  	
  	
  -­‐	
  app/cache/*	
  
	
  	
  	
  	
  -­‐	
  app/logs/*	
  
hosts:	
  
	
  	
  -­‐	
  192.16.0.100	
  
	
  	
  -­‐	
  192.16.0.101	
  
tasks:	
  
	
  	
  pre-­‐deploy:	
  
	
  	
  	
  	
  -­‐	
  scm/update	
  
	
  	
  on-­‐deploy:	
  
	
  	
  	
  	
  -­‐	
  symfony2/cache-­‐warmup:	
  {env:prod}	
  
	
  	
  post-­‐release:	
  
	
  	
  	
  	
  -­‐	
  purge-­‐apc-­‐cache	
  
	
  	
  post-­‐deploy:	
  
	
  	
  	
  	
  -­‐	
  pusrge-­‐varnish-­‐cache	
  
production.yml
#production	
  
deployment:	
  
	
  	
  user:	
  phpcaceres	
  
	
  	
  use-­‐sudo:	
  true	
  
	
  	
  from:	
  ./	
  
	
  	
  to:	
  /var/www/vhosts/www	
  
	
  	
  excludes:	
  
	
  	
  	
  	
  -­‐	
  app/cache/*	
  
	
  	
  	
  	
  -­‐	
  app/logs/*	
  
hosts:	
  
	
  	
  -­‐	
  192.16.0.100	
  
	
  	
  -­‐	
  192.16.0.101	
  
tasks:	
  
	
  	
  pre-­‐deploy:	
  
	
  	
  	
  	
  -­‐	
  scm/update	
  
	
  	
  on-­‐deploy:	
  
	
  	
  	
  	
  -­‐	
  symfony2/cache-­‐warmup:	
  {env:prod}	
  
	
  	
  post-­‐release:	
  
	
  	
  	
  	
  -­‐	
  purge-­‐apc-­‐cache	
  
	
  	
  post-­‐deploy:	
  
	
  	
  	
  	
  -­‐	
  pusrge-­‐varnish-­‐cache	
  
@tharandur
https://github.com/andres-montanez/Magallanes/pull/226
Deployment
mage	
  deploy	
  to:production	
  
Desplegar un entrono es muy fácil:
Ejemplo ejecución
Estrategias de despliegue
deployment:	
  
	
  	
  	
  	
  strategy:	
  targz	
  
deployment:	
  
	
  	
  	
  	
  strategy:	
  rsync	
  
Sincronización de ficheros
Copia un paquete targz
deployment:	
  
	
  	
  	
  	
  strategy:	
  git-­‐rebase	
  
Hace un git rebase en el destino, conserva los archivos sin seguimiento
deployment:	
  
	
  	
  	
  	
  strategy:	
  git-­‐remote-­‐cache	
  
Mantiene el repositorio en una capeta compartida que actualiza y copia en cada release
deployment:	
  
	
  	
  	
  	
  strategy:	
  disabled	
  
No se copia ningún archivo
Releases
releases:	
  
	
  	
  	
  	
  enabled:	
  true	
  	
  
	
  	
  	
  	
  max:	
  5	
  
	
  	
  	
  	
  symlink:	
  current	
  
	
  	
  	
  	
  directory:	
  releases	
  
Las releases se configuran en cada entorno (podemos usarlas o no).
Cada release es un copia completa del proyecto (necesitamos más espacio en el server)
Ejemplo de jerarquía de directorios:
Releases
mage	
  releases	
  list	
  to:production	
  
Listado de releases que hay en un entorno
mage	
  deploy	
  to:production	
  -­‐-­‐overrideRelease	
  
Sobrescribir la release actual.
Rollback a release
mage	
  releases	
  rollback	
  -­‐-­‐release=20150620184648	
  to:production	
  
Solo tenemos que indicar la release a la que queremos cambiar
mage	
  releases	
  rollback	
  -­‐-­‐release=-­‐1	
  to:production	
  
mage	
  releases	
  rollback	
  -­‐-­‐release=-­‐2	
  to:production	
  
mage	
  releases	
  rollback	
  -­‐-­‐release=-­‐3	
  to:production	
  
	
  
Mas fácil todavía
mage	
  releases	
  rollback	
  –release=0	
  to:production	
  
Podemos volver a la última release
mage	
  releases	
  rollback	
  -­‐-­‐release=-­‐1	
  to:production	
  -­‐-­‐deleteCurrent	
  
También podemos borrar la última release al hacer rollback
Stages
Pre-Deploy
Estas tareas se ejecutan en la copia local de código. Es el lugar para
establecer la rama correspondiente, actualizar el repositorio de código,
instalar los vendors y compilar archivos necesarios. Ideal para realizar el
trabajo pesado.
On-Deploy
Estas tareas se ejecutan en cada host definido. Aquí se realiza el despliegue
del código con la estrategia establecida.
Post-Release
Solo si se están usando versiones. Estas tareas se ejecutan en cada host
después de que se establece el enlace simbólico a la nueva release.
Post-Deploy
Estas tareas se ejecutan localmente. Se ejecuta después de que el despliegue
se realiza.
Tareas incluidas
Composer
○  Generate autoload (composer/generate-­‐autoload)	
  
○  Install (composer/install)	
  
Filesystem
○  Apply FACL (filesystem/link-­‐shared-­‐files)	
  
○  Link shared files (filesystem/link-­‐shared-­‐files)	
  
○  Permissions readable only by web server	
  (filesystem/permissions-­‐
readable-­‐only-­‐by-­‐web-­‐server)	
  
○  Permissions (filesystem/permissions)	
  
○  Permissions writable only by web server	
  (filesystem/permissions-­‐
writable-­‐only-­‐by-­‐web-­‐server)	
  
SCM
○  Change branch (scm/change-­‐branch)	
  
○  Clone(scm/clone)
○  Force update(scm/force-­‐update)	
  
○  Remove clone(scm/remove-­‐clone)	
  
○  Update (scm/update)	
  
Tareas incluidas
Symfony2
○  Assetic dump (symfony2/assetic-­‐dump)	
  
○  Assets install (symfony2/assets-­‐install)	
  
○  Cache clear (symfony2/cache-­‐clear)	
  
○  Cache warmup (symfony2/cache-­‐warmup)	
  
○  Clean front controller (symfony2/clear-­‐front-­‐controller)	
  
Magento
○  Clear cache (magento/clear-­‐cache)	
  
○  Clear full page cache (magento/clear-­‐full-­‐page-­‐cache)	
  
General
○  Manual tasks(general/manually)	
  
Tareas personalizadas
○  Son clase PHP muy sencillitas
○  Extienden de MageTaskAbstractTask
○  El namespace tiene que ser Task
○  Obliga a implementar los métodos getName() y run()
○  Se almacenan en .mage/tasks
○  Retorna true o false
○  Podemos lanzar MageTaskErrorWithMessageException si
se produce un error con un mensaje.
○  Podemos lanzar MageTaskSkipException si la tarea es
omitida.
Crear nuestras propias tareas en muy sencillo, esto nos permite adaptar
Magallanes a cualquier aplicación PHP sin ningún tipo de problema.
Tareas personalizadas
<?php	
  
namespace	
  Task;	
  
	
  
use	
  MageTaskBuiltInSymfony2SymfonyAbstractTask;	
  
	
  
class	
  DoctrineSchemaUpdate	
  extends	
  SymfonyAbstractTask	
  
{	
  
	
  	
  	
  	
  public	
  function	
  getName()	
  
	
  	
  	
  	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  return	
  'Doctrine	
  -­‐	
  Updating	
  database';	
  
	
  	
  	
  	
  }	
  
	
  
	
  	
  	
  	
  public	
  function	
  run()	
  
	
  	
  	
  	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  $updateCmd	
  =	
  "	
  doctrine:schema:update	
  –force";	
  
	
  	
  	
  	
  	
  	
  	
  	
  $result	
  =	
  $this-­‐>runCommandRemote($this-­‐>getAppPath()	
  .	
  $updateCmd	
  );	
  
	
  	
  	
  	
  	
  	
  	
  	
  if	
  ($result	
  ===	
  false)	
  {	
  
	
  	
  	
  	
  $createCmd	
  =	
  "	
  doctrine:schema:create	
  -­‐-­‐force” 	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  $result	
  =	
  $this-­‐>runCommandRemote($this-­‐>getAppPath()	
  .	
  createCmd	
  );	
  
	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  	
  	
  	
  	
  return	
  $result;	
  
	
  	
  	
  	
  }	
  
}	
  
Tareas personalizadas
...	
  
	
  
on-­‐deploy:	
  
	
  	
  	
  	
  -­‐	
  doctrine-­‐schema-­‐update	
  
	
  
...	
  
Ya podemos utilizar nuestra tarea, así de fácil.
Interfaces Tareas
MageTaskReleasesIsReleaseAware
Implementando esta interface la tarea sabe que el entorno de
ejecución es una release.
MageTaskReleasesRollbackAware
En un rollback solo se ejecutan las tareas que implementan esta
interface.
MageTaskReleasesSkipOnOverride
Las tareas que emplementan esta interface se ejecutan cuando se
despliega con la opción --releaseOverride
Comandos mage
○  init	
  
○  intall	
  
○  upgrade	
  
○  add	
  
○  list	
  environments	
  
○  Deploy	
  to:production	
  
○  lock	
  to:production	
  
○  unlock	
  to:production	
  
○  releases	
  rollback	
  –release=-­‐1	
  to:production	
  
○  releases	
  list	
  to:production	
  
○  compile	
  
○  version	
  
Comandos personalizados
Si necesitas extender Magallanes añadiendo un nuevo comando, es tan
fácil como hacer una tarea personalizada
○  Son clase PHP muy sencillitas
○  Extienden de MageTaskAbstractCommand
○  El namespace tiene que ser Command
○  Obliga a implementar el método run()
○  Se almacenan en .mage/commands
Comandos personalizados
<?php	
  
namespace	
  Command;	
  
	
  
use	
  MageCommandAbstractCommand;	
  
use	
  MageConsole;	
  
	
  
class	
  ComandoPrueba	
  extends	
  AbstractCommand	
  
{	
  
	
  	
  	
  	
  public	
  function	
  run()	
  
	
  	
  	
  	
  {	
  
	
  Console::output(‘Hola	
  esto	
  es	
  una	
  prueba’,	
  1,	
  2)	
  
	
  return	
  0;	
  
	
  	
  	
  	
  }	
  
}	
  
mage	
  comando-­‐prueba	
  
https://github.com/javiernuber/magallanes-phpcaceres
Ejemplos	
  
GRACIAS!!
¿ALGUNA PREGUNTA?
@javiernuber
javiernuber@gmail.com

Más contenido relacionado

La actualidad más candente

Desarrollo de aplicaciones web con PHP y symfony
Desarrollo de aplicaciones web con PHP y symfonyDesarrollo de aplicaciones web con PHP y symfony
Desarrollo de aplicaciones web con PHP y symfonyJuan Eladio Sánchez Rosas
 
Mis primeros pasos con Symfony 2
Mis primeros pasos con Symfony 2Mis primeros pasos con Symfony 2
Mis primeros pasos con Symfony 2Edgar Dueñas
 
Curso Avanzado PHP para EHU/UPV
Curso Avanzado PHP para EHU/UPVCurso Avanzado PHP para EHU/UPV
Curso Avanzado PHP para EHU/UPVIrontec
 
Vagrant y Docker - Guía práctica de uso
Vagrant y Docker - Guía práctica de usoVagrant y Docker - Guía práctica de uso
Vagrant y Docker - Guía práctica de usoSergio Zambrano Delfa
 
Gulp js php sevilla 28 septiembre 2016
Gulp js   php sevilla 28 septiembre 2016Gulp js   php sevilla 28 septiembre 2016
Gulp js php sevilla 28 septiembre 2016Agencia INNN
 
Tutorial de php y my sql completo
Tutorial de php y my sql completoTutorial de php y my sql completo
Tutorial de php y my sql completoAndrés Amaya
 
Frontend Tools | Herramientas para Frontends
Frontend Tools | Herramientas para FrontendsFrontend Tools | Herramientas para Frontends
Frontend Tools | Herramientas para FrontendsDavid Ballén
 
Introducción a PHP - Programador PHP - UGR
Introducción a PHP - Programador PHP - UGRIntroducción a PHP - Programador PHP - UGR
Introducción a PHP - Programador PHP - UGRJuan Belón Pérez
 
La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR
La Caja de Herramientas del Desarrollador Moderno PHPConferenceARLa Caja de Herramientas del Desarrollador Moderno PHPConferenceAR
La Caja de Herramientas del Desarrollador Moderno PHPConferenceARPablo Godel
 

La actualidad más candente (13)

Desarrollo de aplicaciones web con PHP y symfony
Desarrollo de aplicaciones web con PHP y symfonyDesarrollo de aplicaciones web con PHP y symfony
Desarrollo de aplicaciones web con PHP y symfony
 
Mis primeros pasos con Symfony 2
Mis primeros pasos con Symfony 2Mis primeros pasos con Symfony 2
Mis primeros pasos con Symfony 2
 
Curso Avanzado PHP para EHU/UPV
Curso Avanzado PHP para EHU/UPVCurso Avanzado PHP para EHU/UPV
Curso Avanzado PHP para EHU/UPV
 
Vagrant y Docker - Guía práctica de uso
Vagrant y Docker - Guía práctica de usoVagrant y Docker - Guía práctica de uso
Vagrant y Docker - Guía práctica de uso
 
Servicios web java, php, perl, google
Servicios web java, php, perl, googleServicios web java, php, perl, google
Servicios web java, php, perl, google
 
Turbogears
TurbogearsTurbogears
Turbogears
 
Gulp js php sevilla 28 septiembre 2016
Gulp js   php sevilla 28 septiembre 2016Gulp js   php sevilla 28 septiembre 2016
Gulp js php sevilla 28 septiembre 2016
 
Tutorial de php y my sql completo
Tutorial de php y my sql completoTutorial de php y my sql completo
Tutorial de php y my sql completo
 
php
phpphp
php
 
Frontend Tools | Herramientas para Frontends
Frontend Tools | Herramientas para FrontendsFrontend Tools | Herramientas para Frontends
Frontend Tools | Herramientas para Frontends
 
Introducción a PHP - Programador PHP - UGR
Introducción a PHP - Programador PHP - UGRIntroducción a PHP - Programador PHP - UGR
Introducción a PHP - Programador PHP - UGR
 
La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR
La Caja de Herramientas del Desarrollador Moderno PHPConferenceARLa Caja de Herramientas del Desarrollador Moderno PHPConferenceAR
La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR
 
Maven Overview
Maven OverviewMaven Overview
Maven Overview
 

Similar a Magallanes, Herramienta de despliegue PHP sencilla y poderosa

Test Unitarios y E2E front y Back
Test Unitarios y E2E front y BackTest Unitarios y E2E front y Back
Test Unitarios y E2E front y BackEric Zeidan
 
97132962-instalacion-de-open meetings-en-squeeze
 97132962-instalacion-de-open meetings-en-squeeze 97132962-instalacion-de-open meetings-en-squeeze
97132962-instalacion-de-open meetings-en-squeezexavazquez
 
Introduccion a Ansible
Introduccion a AnsibleIntroduccion a Ansible
Introduccion a AnsibleOsvaldo
 
Realidad Aumentada 01 documentacion tapir
Realidad Aumentada 01 documentacion tapirRealidad Aumentada 01 documentacion tapir
Realidad Aumentada 01 documentacion tapirAgustín Hv
 
Instalando nagios kuman hoy luis
Instalando nagios kuman hoy luisInstalando nagios kuman hoy luis
Instalando nagios kuman hoy luisLuis Kuman
 
Symfony2 Formacion y primeros pasos
Symfony2  Formacion y primeros pasosSymfony2  Formacion y primeros pasos
Symfony2 Formacion y primeros pasosSoni BM
 
Clase 2 GuiaPractica.pdf
Clase 2 GuiaPractica.pdfClase 2 GuiaPractica.pdf
Clase 2 GuiaPractica.pdfodryemeliGomez
 
Proyectos JAVA con maven
Proyectos JAVA con mavenProyectos JAVA con maven
Proyectos JAVA con mavenJuan Vladimir
 
Proyectos java-con-maven
Proyectos java-con-mavenProyectos java-con-maven
Proyectos java-con-mavenJuan Vladimir
 
Humanizacion de java script con typescript para d365
Humanizacion de java script con typescript para d365Humanizacion de java script con typescript para d365
Humanizacion de java script con typescript para d365Demian Raschkovan
 
Tutorial para instalar apache + php + my sql
Tutorial para  instalar apache + php + my sqlTutorial para  instalar apache + php + my sql
Tutorial para instalar apache + php + my sqldanalizcano
 

Similar a Magallanes, Herramienta de despliegue PHP sencilla y poderosa (20)

Test Unitarios y E2E front y Back
Test Unitarios y E2E front y BackTest Unitarios y E2E front y Back
Test Unitarios y E2E front y Back
 
Php andmysql
Php andmysqlPhp andmysql
Php andmysql
 
97132962-instalacion-de-open meetings-en-squeeze
 97132962-instalacion-de-open meetings-en-squeeze 97132962-instalacion-de-open meetings-en-squeeze
97132962-instalacion-de-open meetings-en-squeeze
 
Introduccion a Ansible
Introduccion a AnsibleIntroduccion a Ansible
Introduccion a Ansible
 
Integrando sonar
Integrando sonarIntegrando sonar
Integrando sonar
 
Realidad Aumentada 01 documentacion tapir
Realidad Aumentada 01 documentacion tapirRealidad Aumentada 01 documentacion tapir
Realidad Aumentada 01 documentacion tapir
 
Instalando nagios kuman hoy luis
Instalando nagios kuman hoy luisInstalando nagios kuman hoy luis
Instalando nagios kuman hoy luis
 
Symfony2 Formacion y primeros pasos
Symfony2  Formacion y primeros pasosSymfony2  Formacion y primeros pasos
Symfony2 Formacion y primeros pasos
 
Clase 2 GuiaPractica.pdf
Clase 2 GuiaPractica.pdfClase 2 GuiaPractica.pdf
Clase 2 GuiaPractica.pdf
 
Composer & SemVer
Composer & SemVerComposer & SemVer
Composer & SemVer
 
Proyectos JAVA con maven
Proyectos JAVA con mavenProyectos JAVA con maven
Proyectos JAVA con maven
 
Proyectos java-con-maven
Proyectos java-con-mavenProyectos java-con-maven
Proyectos java-con-maven
 
Humanizacion de java script con typescript para d365
Humanizacion de java script con typescript para d365Humanizacion de java script con typescript para d365
Humanizacion de java script con typescript para d365
 
Tutorial para instalar apache + php + my sql
Tutorial para  instalar apache + php + my sqlTutorial para  instalar apache + php + my sql
Tutorial para instalar apache + php + my sql
 
Despues de instalar fedora 14
Despues de instalar fedora 14Despues de instalar fedora 14
Despues de instalar fedora 14
 
Nagios
NagiosNagios
Nagios
 
Homework
HomeworkHomework
Homework
 
Webpack desde cero
Webpack desde ceroWebpack desde cero
Webpack desde cero
 
Introduccion A Docker
Introduccion A DockerIntroduccion A Docker
Introduccion A Docker
 
Jenkins pipeline
Jenkins pipelineJenkins pipeline
Jenkins pipeline
 

Magallanes, Herramienta de despliegue PHP sencilla y poderosa

  • 1. Herramienta de despliegue PHP sencilla y poderosa. Javier Núñez @javiernuber javiernuber@gmail.com
  • 4. DEPLOYMENT Software deployment is all of the activities that make a software system available for use.
  • 5. “Actividad imprescindible en el desarrollo de un producto de software
  • 6. “Seguro que esta actividad la repites muchas veces
  • 8. Cómo debería ser una herramienta de despliegue ○  Sencilla ○  Fiable y segura ○  Rollbacks ○  Registro de operaciones y errores (logs) ○  Reusable ○  Escalable
  • 9. Métodos de despliegue ○  FTP ○  Rsync ○  Control de versiones (GIT, SVN) ○  Build Tools (Ant, Phing, Jenking) ○  Herramientas de despligue (Capistrano/Capifony, Magallanes, Deployer, Rocketeer, Idephix) ○  IT Automation tools (Ansible, Pupper, Chef)
  • 10. Métodos de despliegue ○  FTP ○  Rsync ○  Control de versiones (GIT, SVN) ○  Build Tools (Ant, Phing, Jenking) ○  Herramientas de despligue (Capistrano/Capifony, Magallanes, Deployer, Rocketeer, Idephix) ○  IT Automation tools (Ansible, Pupper, Chef)
  • 12. ¿QUE ES MAGALLANES? Magallanes es una herramienta de despliegue de aplicaciones PHP escrita en PHP. Muy fácil de usar, configurar y ampliar.
  • 13. Características ○  100% PHP (>= PHP 5.3) ○  Configurable ○  Permite definir múltiples entornos ○  No se apega a ningún framework ○  Con utilidades de serie para algunos frameworks ○  Extensible
  • 14. Características ○  100% PHP (>= PHP 5.3) ○  Configurable ○  Permite definir múltiples entornos ○  No se apega a ningún framework ○  Con utilidades de serie para algunos frameworks ○  Extensible Creador: Andrés Montañez @andres_montañez
  • 15. Instalación wget  http://download.magephp.com/magallanes.latest.tar.gz  -­‐O  magallanes.tar.gz   tar  xfz  magallanes.tar.gz   cd  magallanes   bin/mage  install  -­‐-­‐systemWide  -­‐-­‐installDir=/opt/magallanes   En el parámetro --installDir indicamos el directorio de instalación. Con el parámetro --systemWide se creará un enlace simbólico al comando mage en / usr/bin/mage mage  version   Ya tenemos disponible el comando mage en nuestra consola
  • 16. Instalación Instalación con Composer {          "require-­‐dev":  {                  "andres-­‐montanez/magallanes":  "~1.0.1"          }   }   Actualizamos los vendors php  composer  update  andres-­‐montanez/magallanes   bin/mage  version  
  • 17. Inicialización Primero inicializamos el proyecto Este comando genera en el proyecto la carpeta .mage con la definición del proyecto y los entornos. mage  init  -­‐-­‐name=“PHP  Cáceres  App"  -­‐-­‐email=”hola@phpcaceres.es"  
  • 18. general.yml #  global  settings   name:  PHP  Cáceres   email:  javiernuber@gmail.com   notifications:  false   logging:  true   maxlogs:  30   ssh_needs_tty:  false  
  • 19. Environment Un entorno define cómo se hará el despliegue de nuestra aplicación. Ejemplos clásicos de entornos son production, staging, o testing. mage  add  environment  -­‐-­‐name="production"     La ejecución del comando genera un fichero llamado production.yml dentro de la carpeta .mage/environment Crear un entorno es tan fácil como lanzar el siguiente comando: mage  list  environments   Para ver los entornos existentes
  • 20. production.yml #production   deployment:      user:  phpcaceres      from:  ./      to:  /var/www/vhosts/www      excludes:          -­‐  app/cache/*          -­‐  app/logs/*   hosts:      -­‐  192.16.0.100      -­‐  192.16.0.101   tasks:      pre-­‐deploy:          -­‐  scm/update      on-­‐deploy:          -­‐  symfony2/cache-­‐warmup:  {env:prod}      post-­‐release:          -­‐  purge-­‐apc-­‐cache      post-­‐deploy:          -­‐  pusrge-­‐varnish-­‐cache  
  • 21. production.yml #production   deployment:      user:  phpcaceres      use-­‐sudo:  true      from:  ./      to:  /var/www/vhosts/www      excludes:          -­‐  app/cache/*          -­‐  app/logs/*   hosts:      -­‐  192.16.0.100      -­‐  192.16.0.101   tasks:      pre-­‐deploy:          -­‐  scm/update      on-­‐deploy:          -­‐  symfony2/cache-­‐warmup:  {env:prod}      post-­‐release:          -­‐  purge-­‐apc-­‐cache      post-­‐deploy:          -­‐  pusrge-­‐varnish-­‐cache   @tharandur https://github.com/andres-montanez/Magallanes/pull/226
  • 22. Deployment mage  deploy  to:production   Desplegar un entrono es muy fácil:
  • 24. Estrategias de despliegue deployment:          strategy:  targz   deployment:          strategy:  rsync   Sincronización de ficheros Copia un paquete targz deployment:          strategy:  git-­‐rebase   Hace un git rebase en el destino, conserva los archivos sin seguimiento deployment:          strategy:  git-­‐remote-­‐cache   Mantiene el repositorio en una capeta compartida que actualiza y copia en cada release deployment:          strategy:  disabled   No se copia ningún archivo
  • 25. Releases releases:          enabled:  true            max:  5          symlink:  current          directory:  releases   Las releases se configuran en cada entorno (podemos usarlas o no). Cada release es un copia completa del proyecto (necesitamos más espacio en el server) Ejemplo de jerarquía de directorios:
  • 26. Releases mage  releases  list  to:production   Listado de releases que hay en un entorno mage  deploy  to:production  -­‐-­‐overrideRelease   Sobrescribir la release actual.
  • 27. Rollback a release mage  releases  rollback  -­‐-­‐release=20150620184648  to:production   Solo tenemos que indicar la release a la que queremos cambiar mage  releases  rollback  -­‐-­‐release=-­‐1  to:production   mage  releases  rollback  -­‐-­‐release=-­‐2  to:production   mage  releases  rollback  -­‐-­‐release=-­‐3  to:production     Mas fácil todavía mage  releases  rollback  –release=0  to:production   Podemos volver a la última release mage  releases  rollback  -­‐-­‐release=-­‐1  to:production  -­‐-­‐deleteCurrent   También podemos borrar la última release al hacer rollback
  • 28. Stages Pre-Deploy Estas tareas se ejecutan en la copia local de código. Es el lugar para establecer la rama correspondiente, actualizar el repositorio de código, instalar los vendors y compilar archivos necesarios. Ideal para realizar el trabajo pesado. On-Deploy Estas tareas se ejecutan en cada host definido. Aquí se realiza el despliegue del código con la estrategia establecida. Post-Release Solo si se están usando versiones. Estas tareas se ejecutan en cada host después de que se establece el enlace simbólico a la nueva release. Post-Deploy Estas tareas se ejecutan localmente. Se ejecuta después de que el despliegue se realiza.
  • 29. Tareas incluidas Composer ○  Generate autoload (composer/generate-­‐autoload)   ○  Install (composer/install)   Filesystem ○  Apply FACL (filesystem/link-­‐shared-­‐files)   ○  Link shared files (filesystem/link-­‐shared-­‐files)   ○  Permissions readable only by web server  (filesystem/permissions-­‐ readable-­‐only-­‐by-­‐web-­‐server)   ○  Permissions (filesystem/permissions)   ○  Permissions writable only by web server  (filesystem/permissions-­‐ writable-­‐only-­‐by-­‐web-­‐server)   SCM ○  Change branch (scm/change-­‐branch)   ○  Clone(scm/clone) ○  Force update(scm/force-­‐update)   ○  Remove clone(scm/remove-­‐clone)   ○  Update (scm/update)  
  • 30. Tareas incluidas Symfony2 ○  Assetic dump (symfony2/assetic-­‐dump)   ○  Assets install (symfony2/assets-­‐install)   ○  Cache clear (symfony2/cache-­‐clear)   ○  Cache warmup (symfony2/cache-­‐warmup)   ○  Clean front controller (symfony2/clear-­‐front-­‐controller)   Magento ○  Clear cache (magento/clear-­‐cache)   ○  Clear full page cache (magento/clear-­‐full-­‐page-­‐cache)   General ○  Manual tasks(general/manually)  
  • 31. Tareas personalizadas ○  Son clase PHP muy sencillitas ○  Extienden de MageTaskAbstractTask ○  El namespace tiene que ser Task ○  Obliga a implementar los métodos getName() y run() ○  Se almacenan en .mage/tasks ○  Retorna true o false ○  Podemos lanzar MageTaskErrorWithMessageException si se produce un error con un mensaje. ○  Podemos lanzar MageTaskSkipException si la tarea es omitida. Crear nuestras propias tareas en muy sencillo, esto nos permite adaptar Magallanes a cualquier aplicación PHP sin ningún tipo de problema.
  • 32. Tareas personalizadas <?php   namespace  Task;     use  MageTaskBuiltInSymfony2SymfonyAbstractTask;     class  DoctrineSchemaUpdate  extends  SymfonyAbstractTask   {          public  function  getName()          {                  return  'Doctrine  -­‐  Updating  database';          }            public  function  run()          {                  $updateCmd  =  "  doctrine:schema:update  –force";                  $result  =  $this-­‐>runCommandRemote($this-­‐>getAppPath()  .  $updateCmd  );                  if  ($result  ===  false)  {          $createCmd  =  "  doctrine:schema:create  -­‐-­‐force”                                            $result  =  $this-­‐>runCommandRemote($this-­‐>getAppPath()  .  createCmd  );                  }                  return  $result;          }   }  
  • 33. Tareas personalizadas ...     on-­‐deploy:          -­‐  doctrine-­‐schema-­‐update     ...   Ya podemos utilizar nuestra tarea, así de fácil.
  • 34. Interfaces Tareas MageTaskReleasesIsReleaseAware Implementando esta interface la tarea sabe que el entorno de ejecución es una release. MageTaskReleasesRollbackAware En un rollback solo se ejecutan las tareas que implementan esta interface. MageTaskReleasesSkipOnOverride Las tareas que emplementan esta interface se ejecutan cuando se despliega con la opción --releaseOverride
  • 35. Comandos mage ○  init   ○  intall   ○  upgrade   ○  add   ○  list  environments   ○  Deploy  to:production   ○  lock  to:production   ○  unlock  to:production   ○  releases  rollback  –release=-­‐1  to:production   ○  releases  list  to:production   ○  compile   ○  version  
  • 36. Comandos personalizados Si necesitas extender Magallanes añadiendo un nuevo comando, es tan fácil como hacer una tarea personalizada ○  Son clase PHP muy sencillitas ○  Extienden de MageTaskAbstractCommand ○  El namespace tiene que ser Command ○  Obliga a implementar el método run() ○  Se almacenan en .mage/commands
  • 37. Comandos personalizados <?php   namespace  Command;     use  MageCommandAbstractCommand;   use  MageConsole;     class  ComandoPrueba  extends  AbstractCommand   {          public  function  run()          {    Console::output(‘Hola  esto  es  una  prueba’,  1,  2)    return  0;          }   }   mage  comando-­‐prueba