SlideShare una empresa de Scribd logo
1 de 20
Descargar para leer sin conexión
Deployer
Despliegue rápido y sencillo
de aplicaciones (Web)
Meetups
@SergioCarracedoWeb developer at OPSOU
Php Developer Drupal enthusiast
@SergioCarracedo
¿Qué entendemos despliegue?
Meetups
Es la forma en la que llevamos a una o varias máquinas remotas:
● El código y/o sus cambios
● Los archivos de configuraciones
● Los archivos binarios: Imágenes, videos, documentos
● …..
● Todo lo que necesitamos para hacer funcionar nuestra aplicación
¿Como podemos hacer el despliegue?
Meetups
Copiar código (a mano)
Subida
● FTP / SFTP / SSH / Rsync
● Modificar los archivos de configuración a mano en el destino
● Borrar a mano caches
● etc…
Es muy ineficiente / cansado / aburrido
No podemos hacer rollback
Necesitamos saber la lista de ficheros cambiados
¿Como podemos hacer el despliegue? 2
Meetups
Control de versiones (GIT / SVN)
Ya tenemos nuestro código en git (o deberíamos)
git clone -b master
Seguimos teniendo que tocar la ficheros de configuración a mano.
Es posible hacer rollback pero no es rápido (o tan rápido como puede llegar a ser)
Los archivos de usuario (imágenes, videos, etc) no deberían estar en el repo.
¿Como podemos hacer el despliegue? 3
Meetups
Sistema de despliegue
Es la “Solución”
Podemos hacer rollback “instantáneo” y a distintos puntos, no solo a la última versión
Creación automática de archivos de configuración para cada máquina
Gestión de archivos / directorios escribibles
Gestión de carpetas compartidas
Instalación de vendors
Sistemas de despliegue
Meetups
Existen muchas opciones
● Capistrano http://capistranorb.com/ (Ruby)
● Ansistrano https://github.com/ansistrano (Python)
● Rocketeer http://rocketeer.autopergamene.eu/ (PHP)
● Fabric https://get.fabric.io/ (Python)
Deployer
http://deployer.org/
Deployer
Meetups
● Gestor de despliegues escrito en PHP
● Modular: Permite creación de recetas personalizadas
● Rollback
● Despliegues consistentes en distintos servidores (entornos)
Instalación
mv deployer.phar /usr/local/bin/dep
chmod +x /usr/local/bin/dep
o
composer require deployer/deployer:^3.2
Estructura de directorios
Meetups
/your/project/path
|--releases
| |--20150513120631
| |--...
|--shared
| |--...
|--current -> /your/project/path/releases/20150513120631
Deployer
Meetups
Creamos un archivo de configuración en la raíz del proyecto con el nombre deploy.php
<?php
// All Deployer recipes are based on `recipe/common.php`.
require 'recipe/common.php';
require './.deployer/myrecipe.php';
task('deploy', ['deploy:prepare', 'deploy:release', 'deploy:update_code',
‘deploy:shared', 'deploy:writable', 'deploy:symlink', 'cleanup' ]);
serverList('.deployer/servers.yml');
set(‘keep_releases’, 5);
set('repository', 'git@bitbucket.org:sergiocarracedo/phpvigo_deployer.git');
Deployer: Receta 1
Meetups
Creamos la receta myrecipe.php
<?php
set('shared_files', [
'.htaccess',
'settings.inc.php'
]);
set('shared_dirs', [
'user_imgs',
'cache',
]);
set('writable_dirs', [
'user_img',
'cache',
]);
Deployer: Permisos de escritura
Meetups
Necesitamos añadir al sudoers
user_name ALL=(ALL) NOPASSWD: /usr/bin/setfacl
ACLs
http://rm-rf.es/acl-access-control-list-en-sistemas-de-ficheros-gnulinux/
Nos permite mejor granularidad en los permisos del sistema de archivos
Podemos asignar permisos a un usuario concreto incluso aunque no sea
el propietario ni esté en el grupo del propietario
Si no tenemos ACLs lo podemos hacer a mano (eliminando la tarea deploy:writable)
Deployer: Receta 2
Meetups
task('cc:smarty', function () {
if (askConfirmation('Are you sure to clear SMARTY cache?')) {
run('cd {{deploy_path}}/cache/smarty && rm -f *');
}
});
task('cc:static', function () {
if (askConfirmation('Are you sure to clear STATIC cache?')) {
run('cd {{deploy_path}}/cache/static && rm -f *');
}
});
task('cc:all', [ 'cc:smarty', 'cc:static' ]);
task('upload_img', function () {
if (askConfirmation('Are you sure to upload user imgs?')) {
uploadEnv('user_imgs', '{{deploy_path}}/shared/user_imgs');
}
});
Deployer: Receta 2
Meetups
task('config:generate', function () {
if (askConfirmation('Are you sure to generate settings.inc.php?')) {
$basepath = dirname(__FILE__);
$secrets = env('settings');
//**********************************************//
//Load template and replace secrets / values
//***********************************************//
writeln('settings.php created succesfuly');
$tmpFilename = tempnam( $basepath , 'tmp_settings_' );
file_put_contents($tmpFilename, $settings);
uploadEnv($tmpFilename, '{{deploy_path}}/shared/settings.php');
unlink($tmpFilename);
}
});
Deployer: Server.yml
Meetups
dev:
host: 127.0.0.1:15022
stage: dev
forward_agent: true
user: deploy
password: test2012
deploy_path : /home/deploy/
branch: dev
settings:
user_img_dir: user_imgs
base_path: localhost:9080
tpl_dir: ./assets/t
tpl_cache_dir: ./cache/t
tpl_compile_dir: ./cache/t_c
prod:
host: 127.0.0.1:15022
stage: production
…
…
Deployer: Plantilla settings
Meetups
<?php
$settings = array();
$settings['user_img_dir'] = '{{user_img_dir}}';
$settings['base_path'] = '{{base_path}}';
$settings['tpl_dir'] = '{{tpl_dir}}';
$settings['tpl_cache_dir'] = '{{tpl_cache_dir}}';
$settings['tpl_compile_dir'] = '{{tpl_compile_dir}}';
Demo Time
Meetups
Otras funcionalidades
Meetups
● Triggers: Podemos definir tareas que se ejecuten antes o después de otra tarea
● Tareas sólo en un entorno: Por ejemplo una tarea que solo se pueda ejecutar en dev
● Agrupación de servidores por Stage lo que permite múltiples despliegues simultáneos
● Ejecución remota: Por ejemplo lanzar composer en remoto
Meetups
@SergioCarracedoWeb developer at OPSOU
Php Developer Drupal enthusiast
@SergioCarracedo
echo PHP_EOF;
¿Preguntas?

Más contenido relacionado

La actualidad más candente

Dev ops infraestructura agil con open source
Dev ops   infraestructura agil con open sourceDev ops   infraestructura agil con open source
Dev ops infraestructura agil con open sourcescrumecuador
 
Ansible DevOps Day Peru 2016
Ansible DevOps Day Peru 2016Ansible DevOps Day Peru 2016
Ansible DevOps Day Peru 2016Raul Hugo
 
Administracion de software en debian y derivados (comandos) taringa!
Administracion de software en debian y derivados (comandos)   taringa!Administracion de software en debian y derivados (comandos)   taringa!
Administracion de software en debian y derivados (comandos) taringa!Frank Davila
 
Introducción a Servidor HTTP Apache
Introducción a Servidor HTTP ApacheIntroducción a Servidor HTTP Apache
Introducción a Servidor HTTP ApacheIker Canarias
 
Ansible administracion simplificada
Ansible   administracion simplificada Ansible   administracion simplificada
Ansible administracion simplificada bcoca
 
Gestionando tu infraestructura con Ansible
Gestionando tu infraestructura con Ansible Gestionando tu infraestructura con Ansible
Gestionando tu infraestructura con Ansible Moisés Maciá
 
Ansible + tacos at dev hangout
Ansible + tacos at dev hangoutAnsible + tacos at dev hangout
Ansible + tacos at dev hangoutOscar Gonzalez
 
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
 

La actualidad más candente (17)

Crear pagina apache
Crear pagina apacheCrear pagina apache
Crear pagina apache
 
01intalacion de apache
01intalacion de apache01intalacion de apache
01intalacion de apache
 
Dev ops infraestructura agil con open source
Dev ops   infraestructura agil con open sourceDev ops   infraestructura agil con open source
Dev ops infraestructura agil con open source
 
Ansible DevOps Day Peru 2016
Ansible DevOps Day Peru 2016Ansible DevOps Day Peru 2016
Ansible DevOps Day Peru 2016
 
0 entorno php
0 entorno php0 entorno php
0 entorno php
 
Drupal 8, de cero a producción en minutos.
Drupal 8, de cero a producción en minutos.Drupal 8, de cero a producción en minutos.
Drupal 8, de cero a producción en minutos.
 
Administracion de software en debian y derivados (comandos) taringa!
Administracion de software en debian y derivados (comandos)   taringa!Administracion de software en debian y derivados (comandos)   taringa!
Administracion de software en debian y derivados (comandos) taringa!
 
Entorno PHP
Entorno PHPEntorno PHP
Entorno PHP
 
Introducción a Servidor HTTP Apache
Introducción a Servidor HTTP ApacheIntroducción a Servidor HTTP Apache
Introducción a Servidor HTTP Apache
 
Ansible administracion simplificada
Ansible   administracion simplificada Ansible   administracion simplificada
Ansible administracion simplificada
 
Primeros pasos con Docker
Primeros pasos con DockerPrimeros pasos con Docker
Primeros pasos con Docker
 
Gestionando tu infraestructura con Ansible
Gestionando tu infraestructura con Ansible Gestionando tu infraestructura con Ansible
Gestionando tu infraestructura con Ansible
 
Introducción a Ansible
Introducción a AnsibleIntroducción a Ansible
Introducción a Ansible
 
php
phpphp
php
 
Tz2014 workshop rundeck
Tz2014 workshop rundeckTz2014 workshop rundeck
Tz2014 workshop rundeck
 
Ansible + tacos at dev hangout
Ansible + tacos at dev hangoutAnsible + tacos at dev hangout
Ansible + tacos at dev hangout
 
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
 

Similar a Deployer Despliegue rápido de apps

Php01 instalacion de apache y php en linux
Php01 instalacion de apache y php en linuxPhp01 instalacion de apache y php en linux
Php01 instalacion de apache y php en linuxJulio Pari
 
PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf
PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdfPHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf
PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdfRaaulroodriguez
 
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
 
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
 
Servidor PXE de Instalaciones GNU/Linux
Servidor PXE de Instalaciones GNU/LinuxServidor PXE de Instalaciones GNU/Linux
Servidor PXE de Instalaciones GNU/Linuxfraterneo GNU/Linux
 
Sesion Nº 03 Tecnologias Web I Instalación Y Configuración Del Servidor A...
Sesion Nº 03   Tecnologias Web I   Instalación Y Configuración Del Servidor A...Sesion Nº 03   Tecnologias Web I   Instalación Y Configuración Del Servidor A...
Sesion Nº 03 Tecnologias Web I Instalación Y Configuración Del Servidor A...Edgar A. Cruz Huaman
 
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
 
2290277 instalacion-de-un-servidor-de-base-de-datos-postgre sql-apache-jboss-...
2290277 instalacion-de-un-servidor-de-base-de-datos-postgre sql-apache-jboss-...2290277 instalacion-de-un-servidor-de-base-de-datos-postgre sql-apache-jboss-...
2290277 instalacion-de-un-servidor-de-base-de-datos-postgre sql-apache-jboss-...Andrea Guaygua
 
Crea tus instaladores para linux (fedora, ubuntu, etc) sencillamente
Crea tus instaladores para linux (fedora, ubuntu, etc) sencillamenteCrea tus instaladores para linux (fedora, ubuntu, etc) sencillamente
Crea tus instaladores para linux (fedora, ubuntu, etc) sencillamenteKuboosoft
 
Desarrollo Aplicaciones Zend Framework
Desarrollo Aplicaciones Zend FrameworkDesarrollo Aplicaciones Zend Framework
Desarrollo Aplicaciones Zend Frameworkricsoc
 
Desplegando Proyectos Symfony2 con Capistrano-Capifony y Git
Desplegando Proyectos Symfony2 con Capistrano-Capifony y GitDesplegando Proyectos Symfony2 con Capistrano-Capifony y Git
Desplegando Proyectos Symfony2 con Capistrano-Capifony y Gitmoisesgallego
 
instalacion e intregracion de OcsInventory-NG y GLPI
instalacion e intregracion de OcsInventory-NG y GLPIinstalacion e intregracion de OcsInventory-NG y GLPI
instalacion e intregracion de OcsInventory-NG y GLPImiltonvf
 
Configuracion basica de centos 6.3 linux v1
Configuracion basica de centos 6.3 linux v1Configuracion basica de centos 6.3 linux v1
Configuracion basica de centos 6.3 linux v1Ecatel SRL
 
633f9e tutorial de php y my sql completo
633f9e tutorial de php y my sql completo633f9e tutorial de php y my sql completo
633f9e tutorial de php y my sql completoMETROPOLITANO
 
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 completoErnesto Gamboa
 
633f9e tutorial de php y my sql completo
633f9e tutorial de php y my sql completo633f9e tutorial de php y my sql completo
633f9e tutorial de php y my sql completoUbeimar Navarro Herrera
 

Similar a Deployer Despliegue rápido de apps (20)

Php01 instalacion de apache y php en linux
Php01 instalacion de apache y php en linuxPhp01 instalacion de apache y php en linux
Php01 instalacion de apache y php en linux
 
PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf
PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdfPHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf
PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf
 
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
 
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
 
Servidor PXE de Instalaciones GNU/Linux
Servidor PXE de Instalaciones GNU/LinuxServidor PXE de Instalaciones GNU/Linux
Servidor PXE de Instalaciones GNU/Linux
 
Sesion Nº 03 Tecnologias Web I Instalación Y Configuración Del Servidor A...
Sesion Nº 03   Tecnologias Web I   Instalación Y Configuración Del Servidor A...Sesion Nº 03   Tecnologias Web I   Instalación Y Configuración Del Servidor A...
Sesion Nº 03 Tecnologias Web I Instalación Y Configuración Del Servidor A...
 
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
 
Php andmysql
Php andmysqlPhp andmysql
Php andmysql
 
Kitsune documentation
Kitsune documentationKitsune documentation
Kitsune documentation
 
2290277 instalacion-de-un-servidor-de-base-de-datos-postgre sql-apache-jboss-...
2290277 instalacion-de-un-servidor-de-base-de-datos-postgre sql-apache-jboss-...2290277 instalacion-de-un-servidor-de-base-de-datos-postgre sql-apache-jboss-...
2290277 instalacion-de-un-servidor-de-base-de-datos-postgre sql-apache-jboss-...
 
Crea tus instaladores para linux (fedora, ubuntu, etc) sencillamente
Crea tus instaladores para linux (fedora, ubuntu, etc) sencillamenteCrea tus instaladores para linux (fedora, ubuntu, etc) sencillamente
Crea tus instaladores para linux (fedora, ubuntu, etc) sencillamente
 
Mercurial
MercurialMercurial
Mercurial
 
Desarrollo Aplicaciones Zend Framework
Desarrollo Aplicaciones Zend FrameworkDesarrollo Aplicaciones Zend Framework
Desarrollo Aplicaciones Zend Framework
 
Desplegando Proyectos Symfony2 con Capistrano-Capifony y Git
Desplegando Proyectos Symfony2 con Capistrano-Capifony y GitDesplegando Proyectos Symfony2 con Capistrano-Capifony y Git
Desplegando Proyectos Symfony2 con Capistrano-Capifony y Git
 
instalacion e intregracion de OcsInventory-NG y GLPI
instalacion e intregracion de OcsInventory-NG y GLPIinstalacion e intregracion de OcsInventory-NG y GLPI
instalacion e intregracion de OcsInventory-NG y GLPI
 
Configuracion basica de centos 6.3 linux v1
Configuracion basica de centos 6.3 linux v1Configuracion basica de centos 6.3 linux v1
Configuracion basica de centos 6.3 linux v1
 
633f9e tutorial de php y my sql completo
633f9e tutorial de php y my sql completo633f9e tutorial de php y my sql completo
633f9e tutorial de php y my sql completo
 
Tutorial mysqlphp
Tutorial mysqlphpTutorial mysqlphp
Tutorial mysqlphp
 
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
 
633f9e tutorial de php y my sql completo
633f9e tutorial de php y my sql completo633f9e tutorial de php y my sql completo
633f9e tutorial de php y my sql completo
 

Más de PHP Vigo

Blackfire.io PHPVigo Talk
Blackfire.io PHPVigo TalkBlackfire.io PHPVigo Talk
Blackfire.io PHPVigo TalkPHP Vigo
 
Diariomotor Presentación PHPVigo
Diariomotor Presentación PHPVigoDiariomotor Presentación PHPVigo
Diariomotor Presentación PHPVigoPHP Vigo
 
PHPVigo #09: Preprocesadores CSS/SASS por Sergio Carracedo
PHPVigo #09: Preprocesadores CSS/SASS por Sergio CarracedoPHPVigo #09: Preprocesadores CSS/SASS por Sergio Carracedo
PHPVigo #09: Preprocesadores CSS/SASS por Sergio CarracedoPHP Vigo
 
[Php vigo][talk] unit testing sucks ( and it's your fault )
[Php vigo][talk] unit testing sucks ( and it's your fault )[Php vigo][talk] unit testing sucks ( and it's your fault )
[Php vigo][talk] unit testing sucks ( and it's your fault )PHP Vigo
 
Primeros pasos Symfony PHPVigo
Primeros pasos Symfony PHPVigoPrimeros pasos Symfony PHPVigo
Primeros pasos Symfony PHPVigoPHP Vigo
 
Pablo Arias: Joomla como herramienta para el desarrollo web
Pablo Arias: Joomla como herramienta para el desarrollo webPablo Arias: Joomla como herramienta para el desarrollo web
Pablo Arias: Joomla como herramienta para el desarrollo webPHP Vigo
 
Jesús Amieiro: Git para el día a día
Jesús Amieiro: Git para el día a díaJesús Amieiro: Git para el día a día
Jesús Amieiro: Git para el día a díaPHP Vigo
 
Presentación del grupo PHPVigo - Meetup #1
Presentación del grupo PHPVigo - Meetup #1Presentación del grupo PHPVigo - Meetup #1
Presentación del grupo PHPVigo - Meetup #1PHP Vigo
 

Más de PHP Vigo (8)

Blackfire.io PHPVigo Talk
Blackfire.io PHPVigo TalkBlackfire.io PHPVigo Talk
Blackfire.io PHPVigo Talk
 
Diariomotor Presentación PHPVigo
Diariomotor Presentación PHPVigoDiariomotor Presentación PHPVigo
Diariomotor Presentación PHPVigo
 
PHPVigo #09: Preprocesadores CSS/SASS por Sergio Carracedo
PHPVigo #09: Preprocesadores CSS/SASS por Sergio CarracedoPHPVigo #09: Preprocesadores CSS/SASS por Sergio Carracedo
PHPVigo #09: Preprocesadores CSS/SASS por Sergio Carracedo
 
[Php vigo][talk] unit testing sucks ( and it's your fault )
[Php vigo][talk] unit testing sucks ( and it's your fault )[Php vigo][talk] unit testing sucks ( and it's your fault )
[Php vigo][talk] unit testing sucks ( and it's your fault )
 
Primeros pasos Symfony PHPVigo
Primeros pasos Symfony PHPVigoPrimeros pasos Symfony PHPVigo
Primeros pasos Symfony PHPVigo
 
Pablo Arias: Joomla como herramienta para el desarrollo web
Pablo Arias: Joomla como herramienta para el desarrollo webPablo Arias: Joomla como herramienta para el desarrollo web
Pablo Arias: Joomla como herramienta para el desarrollo web
 
Jesús Amieiro: Git para el día a día
Jesús Amieiro: Git para el día a díaJesús Amieiro: Git para el día a día
Jesús Amieiro: Git para el día a día
 
Presentación del grupo PHPVigo - Meetup #1
Presentación del grupo PHPVigo - Meetup #1Presentación del grupo PHPVigo - Meetup #1
Presentación del grupo PHPVigo - Meetup #1
 

Último

Pablo Scasso - eCommerce Day Chile 2024
Pablo Scasso -  eCommerce Day Chile 2024Pablo Scasso -  eCommerce Day Chile 2024
Pablo Scasso - eCommerce Day Chile 2024eCommerce Institute
 
Mercedes Tomas, Florencia Bianchini - eCommerce Day Chile 2024
Mercedes Tomas, Florencia Bianchini - eCommerce Day Chile 2024Mercedes Tomas, Florencia Bianchini - eCommerce Day Chile 2024
Mercedes Tomas, Florencia Bianchini - eCommerce Day Chile 2024eCommerce Institute
 
PRESENTACION EN SST, plan de trabajo del sistema de seguridad y salud en el t...
PRESENTACION EN SST, plan de trabajo del sistema de seguridad y salud en el t...PRESENTACION EN SST, plan de trabajo del sistema de seguridad y salud en el t...
PRESENTACION EN SST, plan de trabajo del sistema de seguridad y salud en el t...angierangel29072017
 
Expo Construir 2024 agenda-workshops (2).pdf
Expo Construir 2024 agenda-workshops (2).pdfExpo Construir 2024 agenda-workshops (2).pdf
Expo Construir 2024 agenda-workshops (2).pdfTamanaTablada
 
Presupuesto por Resultados de Seguridad Ciudadana .pptx
Presupuesto por Resultados de Seguridad Ciudadana .pptxPresupuesto por Resultados de Seguridad Ciudadana .pptx
Presupuesto por Resultados de Seguridad Ciudadana .pptxhugogabrielac1
 
Suiwen He - eCommerce Day Chile 2024
Suiwen He  -  eCommerce  Day  Chile 2024Suiwen He  -  eCommerce  Day  Chile 2024
Suiwen He - eCommerce Day Chile 2024eCommerce Institute
 
Nicolás von Graevenitz, Rodrigo Guajardo, Fabián Müller, Alberto Banano Pardo...
Nicolás von Graevenitz, Rodrigo Guajardo, Fabián Müller, Alberto Banano Pardo...Nicolás von Graevenitz, Rodrigo Guajardo, Fabián Müller, Alberto Banano Pardo...
Nicolás von Graevenitz, Rodrigo Guajardo, Fabián Müller, Alberto Banano Pardo...eCommerce Institute
 
José Ignacio Calle, Nathalie Jacobs - eCommerce Day Chile 2024
José Ignacio Calle, Nathalie Jacobs - eCommerce Day Chile 2024José Ignacio Calle, Nathalie Jacobs - eCommerce Day Chile 2024
José Ignacio Calle, Nathalie Jacobs - eCommerce Day Chile 2024eCommerce Institute
 
Felipe González - eCommerce Day Chile 2024
Felipe González - eCommerce Day Chile 2024Felipe González - eCommerce Day Chile 2024
Felipe González - eCommerce Day Chile 2024eCommerce Institute
 
Alexander Rubilar, Enzo Tapia - eCommerce Day Chile 2024
Alexander Rubilar, Enzo Tapia - eCommerce Day Chile 2024Alexander Rubilar, Enzo Tapia - eCommerce Day Chile 2024
Alexander Rubilar, Enzo Tapia - eCommerce Day Chile 2024eCommerce Institute
 
Sebastián Iturriaga - eCommerce Day Chile 2024
Sebastián Iturriaga - eCommerce Day Chile 2024Sebastián Iturriaga - eCommerce Day Chile 2024
Sebastián Iturriaga - eCommerce Day Chile 2024eCommerce Institute
 
Act#3.2_Investigación_Bibliográfica_Comunicación_Equipo.pdf
Act#3.2_Investigación_Bibliográfica_Comunicación_Equipo.pdfAct#3.2_Investigación_Bibliográfica_Comunicación_Equipo.pdf
Act#3.2_Investigación_Bibliográfica_Comunicación_Equipo.pdfXimenaGonzlez95
 
Francisco Irarrazaval, Marcos Pueyrredon - eCommerce Day Chile 2024
Francisco Irarrazaval, Marcos Pueyrredon - eCommerce Day Chile 2024Francisco Irarrazaval, Marcos Pueyrredon - eCommerce Day Chile 2024
Francisco Irarrazaval, Marcos Pueyrredon - eCommerce Day Chile 2024eCommerce Institute
 
Enrique Amarista Graterol - eCommerce Day Chile 2024
Enrique Amarista Graterol - eCommerce Day Chile 2024Enrique Amarista Graterol - eCommerce Day Chile 2024
Enrique Amarista Graterol - eCommerce Day Chile 2024eCommerce Institute
 
Modelos comunicacionales. Antonella Castrataro.pdf
Modelos comunicacionales. Antonella Castrataro.pdfModelos comunicacionales. Antonella Castrataro.pdf
Modelos comunicacionales. Antonella Castrataro.pdfnenelli2004
 

Último (15)

Pablo Scasso - eCommerce Day Chile 2024
Pablo Scasso -  eCommerce Day Chile 2024Pablo Scasso -  eCommerce Day Chile 2024
Pablo Scasso - eCommerce Day Chile 2024
 
Mercedes Tomas, Florencia Bianchini - eCommerce Day Chile 2024
Mercedes Tomas, Florencia Bianchini - eCommerce Day Chile 2024Mercedes Tomas, Florencia Bianchini - eCommerce Day Chile 2024
Mercedes Tomas, Florencia Bianchini - eCommerce Day Chile 2024
 
PRESENTACION EN SST, plan de trabajo del sistema de seguridad y salud en el t...
PRESENTACION EN SST, plan de trabajo del sistema de seguridad y salud en el t...PRESENTACION EN SST, plan de trabajo del sistema de seguridad y salud en el t...
PRESENTACION EN SST, plan de trabajo del sistema de seguridad y salud en el t...
 
Expo Construir 2024 agenda-workshops (2).pdf
Expo Construir 2024 agenda-workshops (2).pdfExpo Construir 2024 agenda-workshops (2).pdf
Expo Construir 2024 agenda-workshops (2).pdf
 
Presupuesto por Resultados de Seguridad Ciudadana .pptx
Presupuesto por Resultados de Seguridad Ciudadana .pptxPresupuesto por Resultados de Seguridad Ciudadana .pptx
Presupuesto por Resultados de Seguridad Ciudadana .pptx
 
Suiwen He - eCommerce Day Chile 2024
Suiwen He  -  eCommerce  Day  Chile 2024Suiwen He  -  eCommerce  Day  Chile 2024
Suiwen He - eCommerce Day Chile 2024
 
Nicolás von Graevenitz, Rodrigo Guajardo, Fabián Müller, Alberto Banano Pardo...
Nicolás von Graevenitz, Rodrigo Guajardo, Fabián Müller, Alberto Banano Pardo...Nicolás von Graevenitz, Rodrigo Guajardo, Fabián Müller, Alberto Banano Pardo...
Nicolás von Graevenitz, Rodrigo Guajardo, Fabián Müller, Alberto Banano Pardo...
 
José Ignacio Calle, Nathalie Jacobs - eCommerce Day Chile 2024
José Ignacio Calle, Nathalie Jacobs - eCommerce Day Chile 2024José Ignacio Calle, Nathalie Jacobs - eCommerce Day Chile 2024
José Ignacio Calle, Nathalie Jacobs - eCommerce Day Chile 2024
 
Felipe González - eCommerce Day Chile 2024
Felipe González - eCommerce Day Chile 2024Felipe González - eCommerce Day Chile 2024
Felipe González - eCommerce Day Chile 2024
 
Alexander Rubilar, Enzo Tapia - eCommerce Day Chile 2024
Alexander Rubilar, Enzo Tapia - eCommerce Day Chile 2024Alexander Rubilar, Enzo Tapia - eCommerce Day Chile 2024
Alexander Rubilar, Enzo Tapia - eCommerce Day Chile 2024
 
Sebastián Iturriaga - eCommerce Day Chile 2024
Sebastián Iturriaga - eCommerce Day Chile 2024Sebastián Iturriaga - eCommerce Day Chile 2024
Sebastián Iturriaga - eCommerce Day Chile 2024
 
Act#3.2_Investigación_Bibliográfica_Comunicación_Equipo.pdf
Act#3.2_Investigación_Bibliográfica_Comunicación_Equipo.pdfAct#3.2_Investigación_Bibliográfica_Comunicación_Equipo.pdf
Act#3.2_Investigación_Bibliográfica_Comunicación_Equipo.pdf
 
Francisco Irarrazaval, Marcos Pueyrredon - eCommerce Day Chile 2024
Francisco Irarrazaval, Marcos Pueyrredon - eCommerce Day Chile 2024Francisco Irarrazaval, Marcos Pueyrredon - eCommerce Day Chile 2024
Francisco Irarrazaval, Marcos Pueyrredon - eCommerce Day Chile 2024
 
Enrique Amarista Graterol - eCommerce Day Chile 2024
Enrique Amarista Graterol - eCommerce Day Chile 2024Enrique Amarista Graterol - eCommerce Day Chile 2024
Enrique Amarista Graterol - eCommerce Day Chile 2024
 
Modelos comunicacionales. Antonella Castrataro.pdf
Modelos comunicacionales. Antonella Castrataro.pdfModelos comunicacionales. Antonella Castrataro.pdf
Modelos comunicacionales. Antonella Castrataro.pdf
 

Deployer Despliegue rápido de apps

  • 1.
  • 2. Deployer Despliegue rápido y sencillo de aplicaciones (Web)
  • 3. Meetups @SergioCarracedoWeb developer at OPSOU Php Developer Drupal enthusiast @SergioCarracedo
  • 4. ¿Qué entendemos despliegue? Meetups Es la forma en la que llevamos a una o varias máquinas remotas: ● El código y/o sus cambios ● Los archivos de configuraciones ● Los archivos binarios: Imágenes, videos, documentos ● ….. ● Todo lo que necesitamos para hacer funcionar nuestra aplicación
  • 5. ¿Como podemos hacer el despliegue? Meetups Copiar código (a mano) Subida ● FTP / SFTP / SSH / Rsync ● Modificar los archivos de configuración a mano en el destino ● Borrar a mano caches ● etc… Es muy ineficiente / cansado / aburrido No podemos hacer rollback Necesitamos saber la lista de ficheros cambiados
  • 6. ¿Como podemos hacer el despliegue? 2 Meetups Control de versiones (GIT / SVN) Ya tenemos nuestro código en git (o deberíamos) git clone -b master Seguimos teniendo que tocar la ficheros de configuración a mano. Es posible hacer rollback pero no es rápido (o tan rápido como puede llegar a ser) Los archivos de usuario (imágenes, videos, etc) no deberían estar en el repo.
  • 7. ¿Como podemos hacer el despliegue? 3 Meetups Sistema de despliegue Es la “Solución” Podemos hacer rollback “instantáneo” y a distintos puntos, no solo a la última versión Creación automática de archivos de configuración para cada máquina Gestión de archivos / directorios escribibles Gestión de carpetas compartidas Instalación de vendors
  • 8. Sistemas de despliegue Meetups Existen muchas opciones ● Capistrano http://capistranorb.com/ (Ruby) ● Ansistrano https://github.com/ansistrano (Python) ● Rocketeer http://rocketeer.autopergamene.eu/ (PHP) ● Fabric https://get.fabric.io/ (Python) Deployer http://deployer.org/
  • 9. Deployer Meetups ● Gestor de despliegues escrito en PHP ● Modular: Permite creación de recetas personalizadas ● Rollback ● Despliegues consistentes en distintos servidores (entornos) Instalación mv deployer.phar /usr/local/bin/dep chmod +x /usr/local/bin/dep o composer require deployer/deployer:^3.2
  • 10. Estructura de directorios Meetups /your/project/path |--releases | |--20150513120631 | |--... |--shared | |--... |--current -> /your/project/path/releases/20150513120631
  • 11. Deployer Meetups Creamos un archivo de configuración en la raíz del proyecto con el nombre deploy.php <?php // All Deployer recipes are based on `recipe/common.php`. require 'recipe/common.php'; require './.deployer/myrecipe.php'; task('deploy', ['deploy:prepare', 'deploy:release', 'deploy:update_code', ‘deploy:shared', 'deploy:writable', 'deploy:symlink', 'cleanup' ]); serverList('.deployer/servers.yml'); set(‘keep_releases’, 5); set('repository', 'git@bitbucket.org:sergiocarracedo/phpvigo_deployer.git');
  • 12. Deployer: Receta 1 Meetups Creamos la receta myrecipe.php <?php set('shared_files', [ '.htaccess', 'settings.inc.php' ]); set('shared_dirs', [ 'user_imgs', 'cache', ]); set('writable_dirs', [ 'user_img', 'cache', ]);
  • 13. Deployer: Permisos de escritura Meetups Necesitamos añadir al sudoers user_name ALL=(ALL) NOPASSWD: /usr/bin/setfacl ACLs http://rm-rf.es/acl-access-control-list-en-sistemas-de-ficheros-gnulinux/ Nos permite mejor granularidad en los permisos del sistema de archivos Podemos asignar permisos a un usuario concreto incluso aunque no sea el propietario ni esté en el grupo del propietario Si no tenemos ACLs lo podemos hacer a mano (eliminando la tarea deploy:writable)
  • 14. Deployer: Receta 2 Meetups task('cc:smarty', function () { if (askConfirmation('Are you sure to clear SMARTY cache?')) { run('cd {{deploy_path}}/cache/smarty && rm -f *'); } }); task('cc:static', function () { if (askConfirmation('Are you sure to clear STATIC cache?')) { run('cd {{deploy_path}}/cache/static && rm -f *'); } }); task('cc:all', [ 'cc:smarty', 'cc:static' ]); task('upload_img', function () { if (askConfirmation('Are you sure to upload user imgs?')) { uploadEnv('user_imgs', '{{deploy_path}}/shared/user_imgs'); } });
  • 15. Deployer: Receta 2 Meetups task('config:generate', function () { if (askConfirmation('Are you sure to generate settings.inc.php?')) { $basepath = dirname(__FILE__); $secrets = env('settings'); //**********************************************// //Load template and replace secrets / values //***********************************************// writeln('settings.php created succesfuly'); $tmpFilename = tempnam( $basepath , 'tmp_settings_' ); file_put_contents($tmpFilename, $settings); uploadEnv($tmpFilename, '{{deploy_path}}/shared/settings.php'); unlink($tmpFilename); } });
  • 16. Deployer: Server.yml Meetups dev: host: 127.0.0.1:15022 stage: dev forward_agent: true user: deploy password: test2012 deploy_path : /home/deploy/ branch: dev settings: user_img_dir: user_imgs base_path: localhost:9080 tpl_dir: ./assets/t tpl_cache_dir: ./cache/t tpl_compile_dir: ./cache/t_c prod: host: 127.0.0.1:15022 stage: production … …
  • 17. Deployer: Plantilla settings Meetups <?php $settings = array(); $settings['user_img_dir'] = '{{user_img_dir}}'; $settings['base_path'] = '{{base_path}}'; $settings['tpl_dir'] = '{{tpl_dir}}'; $settings['tpl_cache_dir'] = '{{tpl_cache_dir}}'; $settings['tpl_compile_dir'] = '{{tpl_compile_dir}}';
  • 19. Otras funcionalidades Meetups ● Triggers: Podemos definir tareas que se ejecuten antes o después de otra tarea ● Tareas sólo en un entorno: Por ejemplo una tarea que solo se pueda ejecutar en dev ● Agrupación de servidores por Stage lo que permite múltiples despliegues simultáneos ● Ejecución remota: Por ejemplo lanzar composer en remoto
  • 20. Meetups @SergioCarracedoWeb developer at OPSOU Php Developer Drupal enthusiast @SergioCarracedo echo PHP_EOF; ¿Preguntas?