deployer despliegue rápido de apps

20

Upload: php-vigo

Post on 16-Feb-2017

132 views

Category:

Presentations & Public Speaking


2 download

TRANSCRIPT

Page 1: Deployer  Despliegue rápido de apps
Page 2: Deployer  Despliegue rápido de apps

DeployerDespliegue rápido y sencillo de aplicaciones (Web)

Page 3: Deployer  Despliegue rápido de apps

Meetups

@SergioCarracedoWeb developer at OPSOUPhp Developer Drupal enthusiast

@SergioCarracedo

Page 4: Deployer  Despliegue rápido de apps

¿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

Page 5: Deployer  Despliegue rápido de apps

¿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 / aburridoNo podemos hacer rollbackNecesitamos saber la lista de ficheros cambiados

Page 6: Deployer  Despliegue rápido de apps

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

Page 7: Deployer  Despliegue rápido de apps

¿Como podemos hacer el despliegue? 3

Meetups

Sistema de despliegueEs la “Solución”

Podemos hacer rollback “instantáneo” y a distintos puntos, no solo a la última versiónCreación automática de archivos de configuración para cada máquinaGestión de archivos / directorios escribiblesGestión de carpetas compartidasInstalación de vendors

Page 8: Deployer  Despliegue rápido de apps

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/

Page 9: Deployer  Despliegue rápido de apps

Deployer

Meetups

● Gestor de despliegues escrito en PHP● Modular: Permite creación de recetas personalizadas● Rollback● Despliegues consistentes en distintos servidores (entornos)

Instalaciónmv deployer.phar /usr/local/bin/dep

chmod +x /usr/local/bin/dep

ocomposer require deployer/deployer:^3.2

Page 10: Deployer  Despliegue rápido de apps

Estructura de directorios

Meetups

/your/project/path|--releases| |--20150513120631| |--...|--shared| |--...|--current -> /your/project/path/releases/20150513120631

Page 11: Deployer  Despliegue rápido de apps

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', '[email protected]:sergiocarracedo/phpvigo_deployer.git');

Page 12: Deployer  Despliegue rápido de apps

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',]);

Page 13: Deployer  Despliegue rápido de apps

Deployer: Permisos de escritura

Meetups

Necesitamos añadir al sudoersuser_name ALL=(ALL) NOPASSWD: /usr/bin/setfacl

ACLshttp://rm-rf.es/acl-access-control-list-en-sistemas-de-ficheros-gnulinux/

Nos permite mejor granularidad en los permisos del sistema de archivosPodemos 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)

Page 14: Deployer  Despliegue rápido de apps

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'); }});

Page 15: Deployer  Despliegue rápido de apps

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); }});

Page 16: Deployer  Despliegue rápido de apps

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 …

Page 17: Deployer  Despliegue rápido de apps

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}}';

Page 18: Deployer  Despliegue rápido de apps

Demo Time

Meetups

Page 19: Deployer  Despliegue rápido de apps

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

Page 20: Deployer  Despliegue rápido de apps

Meetups

@SergioCarracedoWeb developer at OPSOUPhp Developer Drupal enthusiast

@SergioCarracedo

echo PHP_EOF;¿Preguntas?