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

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
 
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
André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!
 
Introducción a Servidor HTTP Apache
Introducción a Servidor HTTP ApacheIntroducción a Servidor HTTP Apache
Introducción a Servidor HTTP Apache
 
Entorno PHP
Entorno PHPEntorno PHP
Entorno PHP
 
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
 

Destacado

Toi di giua hoang hon
Toi di giua hoang honToi di giua hoang hon
Toi di giua hoang hon
taivang
 
Nelson Mandela. CEIP A Solaina
 Nelson Mandela. CEIP A Solaina Nelson Mandela. CEIP A Solaina
Nelson Mandela. CEIP A Solaina
A Solaina
 
Nghe nghiep nguoi me
Nghe nghiep nguoi me Nghe nghiep nguoi me
Nghe nghiep nguoi me
taivang
 
Chuyen do que huong
Chuyen do que huong   Chuyen do que huong
Chuyen do que huong
taivang
 
11 . 14 nho tuoi tho ha noi
11 . 14 nho tuoi tho ha noi 11 . 14 nho tuoi tho ha noi
11 . 14 nho tuoi tho ha noi
taivang
 
10 37 gom thanh ha web
10 37 gom thanh ha web10 37 gom thanh ha web
10 37 gom thanh ha web
taivang
 
Digitizing the mobile_workforce_electronic_health_records_for_hospice
Digitizing the mobile_workforce_electronic_health_records_for_hospiceDigitizing the mobile_workforce_electronic_health_records_for_hospice
Digitizing the mobile_workforce_electronic_health_records_for_hospice
QuestexConf
 
Ditch_Leads_and_Acquire_Customers
Ditch_Leads_and_Acquire_CustomersDitch_Leads_and_Acquire_Customers
Ditch_Leads_and_Acquire_Customers
QuestexConf
 
Managing content in_a_mobile_world
Managing content in_a_mobile_worldManaging content in_a_mobile_world
Managing content in_a_mobile_world
QuestexConf
 
Ecm mythbusters the_real_story_behind_vendor_marketing
Ecm mythbusters the_real_story_behind_vendor_marketingEcm mythbusters the_real_story_behind_vendor_marketing
Ecm mythbusters the_real_story_behind_vendor_marketing
QuestexConf
 
Pablo,miguel,gorka y sergio
Pablo,miguel,gorka y sergioPablo,miguel,gorka y sergio
Pablo,miguel,gorka y sergio
A Solaina
 
Bong ca
Bong ca Bong ca
Bong ca
taivang
 
Simulation: Winning with a Faculty Training Website Repository INACSL 2013
Simulation: Winning with a Faculty Training Website Repository INACSL 2013Simulation: Winning with a Faculty Training Website Repository INACSL 2013
Simulation: Winning with a Faculty Training Website Repository INACSL 2013
Lori Lioce
 
Visual dictionary
Visual dictionaryVisual dictionary
Visual dictionary
Josh Jordan
 
Finding the right_portal_for_e_government_services
Finding the right_portal_for_e_government_servicesFinding the right_portal_for_e_government_services
Finding the right_portal_for_e_government_services
QuestexConf
 

Destacado (20)

Toi di giua hoang hon
Toi di giua hoang honToi di giua hoang hon
Toi di giua hoang hon
 
Nelson Mandela. CEIP A Solaina
 Nelson Mandela. CEIP A Solaina Nelson Mandela. CEIP A Solaina
Nelson Mandela. CEIP A Solaina
 
Earn Money Online India
Earn Money Online IndiaEarn Money Online India
Earn Money Online India
 
Nghe nghiep nguoi me
Nghe nghiep nguoi me Nghe nghiep nguoi me
Nghe nghiep nguoi me
 
Chuyen do que huong
Chuyen do que huong   Chuyen do que huong
Chuyen do que huong
 
Corso Dirigenti Cooperative 25.03 Plenaria
Corso Dirigenti Cooperative 25.03 PlenariaCorso Dirigenti Cooperative 25.03 Plenaria
Corso Dirigenti Cooperative 25.03 Plenaria
 
11 . 14 nho tuoi tho ha noi
11 . 14 nho tuoi tho ha noi 11 . 14 nho tuoi tho ha noi
11 . 14 nho tuoi tho ha noi
 
10 37 gom thanh ha web
10 37 gom thanh ha web10 37 gom thanh ha web
10 37 gom thanh ha web
 
Digitizing the mobile_workforce_electronic_health_records_for_hospice
Digitizing the mobile_workforce_electronic_health_records_for_hospiceDigitizing the mobile_workforce_electronic_health_records_for_hospice
Digitizing the mobile_workforce_electronic_health_records_for_hospice
 
Ditch_Leads_and_Acquire_Customers
Ditch_Leads_and_Acquire_CustomersDitch_Leads_and_Acquire_Customers
Ditch_Leads_and_Acquire_Customers
 
Actividad ecbi
Actividad ecbiActividad ecbi
Actividad ecbi
 
Managing content in_a_mobile_world
Managing content in_a_mobile_worldManaging content in_a_mobile_world
Managing content in_a_mobile_world
 
Ecm mythbusters the_real_story_behind_vendor_marketing
Ecm mythbusters the_real_story_behind_vendor_marketingEcm mythbusters the_real_story_behind_vendor_marketing
Ecm mythbusters the_real_story_behind_vendor_marketing
 
Pablo,miguel,gorka y sergio
Pablo,miguel,gorka y sergioPablo,miguel,gorka y sergio
Pablo,miguel,gorka y sergio
 
Bong ca
Bong ca Bong ca
Bong ca
 
Conference marketing presentation
Conference marketing presentationConference marketing presentation
Conference marketing presentation
 
Simulation: Winning with a Faculty Training Website Repository INACSL 2013
Simulation: Winning with a Faculty Training Website Repository INACSL 2013Simulation: Winning with a Faculty Training Website Repository INACSL 2013
Simulation: Winning with a Faculty Training Website Repository INACSL 2013
 
Visual dictionary
Visual dictionaryVisual dictionary
Visual dictionary
 
Apostila execução trabalhista
Apostila  execução trabalhistaApostila  execução trabalhista
Apostila execução trabalhista
 
Finding the right_portal_for_e_government_services
Finding the right_portal_for_e_government_servicesFinding the right_portal_for_e_government_services
Finding the right_portal_for_e_government_services
 

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 linux
Julio 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.pdf
Raaulroodriguez
 
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
xavazquez
 
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) sencillamente
Kuboosoft
 
Desarrollo Aplicaciones Zend Framework
Desarrollo Aplicaciones Zend FrameworkDesarrollo Aplicaciones Zend Framework
Desarrollo Aplicaciones Zend Framework
ricsoc
 
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
METROPOLITANO
 
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
Ernesto Gamboa
 

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
 

Último (7)

EVOLUCION DE LA ENFERMERIA QUIRURGICA Y ETICA 1.pptx
EVOLUCION DE LA ENFERMERIA QUIRURGICA Y ETICA 1.pptxEVOLUCION DE LA ENFERMERIA QUIRURGICA Y ETICA 1.pptx
EVOLUCION DE LA ENFERMERIA QUIRURGICA Y ETICA 1.pptx
 
LA DECLAMACIÓN Y LOS RECURSOS NO VERBALES
LA DECLAMACIÓN Y LOS RECURSOS NO VERBALESLA DECLAMACIÓN Y LOS RECURSOS NO VERBALES
LA DECLAMACIÓN Y LOS RECURSOS NO VERBALES
 
Willer Gehizon Sanchez Mora
Willer Gehizon Sanchez MoraWiller Gehizon Sanchez Mora
Willer Gehizon Sanchez Mora
 
Modelos comunicacionales. Antonella Castrataro.pdf
Modelos comunicacionales. Antonella Castrataro.pdfModelos comunicacionales. Antonella Castrataro.pdf
Modelos comunicacionales. Antonella Castrataro.pdf
 
Introducción a la liturgia de la Iglesia_Curso_1
Introducción a la liturgia de la Iglesia_Curso_1Introducción a la liturgia de la Iglesia_Curso_1
Introducción a la liturgia de la Iglesia_Curso_1
 
Día Mundial de la Seguridad y Salud en el Trabajo 2024
Día Mundial de la Seguridad y Salud en el Trabajo 2024Día Mundial de la Seguridad y Salud en el Trabajo 2024
Día Mundial de la Seguridad y Salud en el Trabajo 2024
 
DIABETES MELLITUS trabajo de investigación
DIABETES MELLITUS trabajo de investigaciónDIABETES MELLITUS trabajo de investigación
DIABETES MELLITUS trabajo de investigación
 

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?