Este documento describe cómo Deployer puede usarse para implementar aplicaciones de forma rápida y sencilla. Deployer es un sistema de implementación escrito en PHP que permite implementaciones consistentes en diferentes servidores y reversión rápida a versiones anteriores. El documento explica cómo configurar Deployer mediante la creación de recetas personalizadas, archivos de configuración de servidor y plantillas de configuración.
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
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');
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);
}
});
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