Profesionaliza tus deploys

Deployer

"Piensa en la automatización"

https://bit.ly/3sHoPSF

¡Hola y bienvenid@s!

Mi nombre es José J. Peleato Pradel.

by jjpeleato.com

Disclaimer

En la presente sesión vamos a conocer que es Deployer v6.8.0, conocer cómo nos puede ayudar en la automatización de procesos, cómo podemos definir una metodología en nuestro flujo de despliegues y además, conoceremos cómo implementar esta herramienta con WordPress.

Momento de reflexión, Deployer es una herramienta más y cómo todo aparejo, debemos valorar en que nos puede ayudar y si lo puede hacer =)

¿Qué es Deployer?

Deployer

Página oficial | Documentación | GitHub

«A deployment tool written in PHP with support for popular frameworks out of the box» – Deployer.

Deployer es una herramienta construida en PHP para el desarrollo web, nos permite la automatización de despliegues con múltiples tareas (cualquier tarea) en diferentes entornos (multiple staging environments), todo ello, a través de un único archivo de configuración.

¿Por qué utilizar Deployer?

El despliegue de aplicaciones consiste en todas las actividades que hacen que un sistema de software esté disponible para su uso.

Normalmente, se realizan tareas repetitivas para subir al servidor la última versión estable del código, ya sea a través la instalación de dependencias de Composer o paquetes NPM, copilar SASS, minificar JS, etc.

Acciones que de forma manual o semi manual hacen que invirtamos tiempo no productivo.

Y es ahí, dónde Deployer nos puede ayudar, creando la automatización de procesos, de manera que se reduzca el tiempo necesario para hacer llegar las nuevas funcionalidades o correcciones a los usuarios finales y se minimice los errores humanos.

¿Como funciona?

Un mecanismo que combina el uso de Git (con el repositorio especificado) y SSH.

Facilita una de las acciones más habituales en el ciclo de vida del software, los despliegues, pudiendo así, tener un control total de que se publica a demo (alpha), preproducción (beta) o producción.

Además, en caso de error en la versión liberada, nos permite poder deshacer el último despliegue de una forma rápida y segura.

Recipes

Las recipes son la abstracción de más alto nivel de Deployer, configuraciones predeterminadas de frameworks.

Dicho de otra forma, puntos de partida con las necesidades básicas para proyectos de Software, cómo por ejemplo: Symfony, Laravel, WordPress, etc.

Estructura directorios

Directorio Descripción
releases Carpeta donde se guarda el código desplegado. Por defecto Deployer guarda los últimos 5 despliegues realizados en carpetas numeradas (1, 2, 3, etc.) de manera que el código correspondiente al primer despliegue se encontrará en la carpeta /releases/1, el del siguiente en /releases/2 y así sucesivamente.
current Enlace simbólico a la carpeta que contiene el último despliegue y por tanto la versión más actualizada de nuestra aplicación. Esta carpeta será la que deberemos configurar como root en el servidor web.
shared Ficheros y directorios compartidos. Cada una de las carpetas en releases contendrá enlaces simbólicos a los directorios y ficheros compartidos en shared.

Si realizamos otro despliegue con Deployer veremos que se coloca en la carpeta /releases/2 y actualiza el enlace simbólico current para que apunte a esta carpeta.

Esto nos permite realizar despliegues sin necesidad de parar la aplicación y mantener las releases anteriores en caso de que algo vaya mal y queramos hacer un rollback.

Hooks

En Deployer existen dos ganchos donde encolar la ejecución de nuestras tareas personalizadas: before y after.

before('deploy', 'slack:notify');
after('deploy:failed', 'slack:notify:failure');

Instalación

Requisitos

  • require: PHP (cli) >7.2.*
  • require-dev: Composer

Global

curl -LO https://deployer.org/deployer.phar
mv deployer.phar /usr/local/bin/dep
chmod +x /usr/local/bin/dep

Composer

Deployer on Packagist

composer require deployer/deployer --dev

Lando + Composer

lando composer require deployer/deployer --dev
# .lando.yml
# See: https://docs.devwithlando.io/config/tooling.html
tooling:
  dep:
    service: appserver
    desription: run deployer commands
    cmd:
      - "vendor/bin/dep"

Es muy importante saber que Deployer ejecuta todas las tareas en el lado del servidor vía SSH, eso significa, que sí en nuestro archivo tenemos tareas que dependen de software cómo NPM, Yarn, Composer, etc, deberán estar instalados en el servidor remoto.

Comandos

Comando Descripción
dep [command] Ejecutar Deployer de forma global.
php vendor/bin/dep [command] Ejecutar Deployer con instalación a través de Composer.
lando dep [command] Ejecutar Deployer a través de Lando y Composer.

Todos los comandos se pueden ejecutar en modo "verbose": -v, -vv o -vvv

Comando Descripción
lando dep init Inicializa y crea el archivo deploy.php.
lando dep list Listado de todos los comandos y opciones de Deployer.
lando dep deploy [stage] Desplegar proyecto según entorno declarado.
lando dep rollback [stage] Revertir último despliegue a la versión anterior.
lando dep cleanup [stage] Limpiar versiones antiguas en el servidor remoto.
lando dep run "command" --stage [stage] Ejecuta el comando especificado en el servidor remoto.
lando dep ssh [stage] Conectar vía SSH al servidor remoto.
lando dep [task] Ejecutar tarea especificada en el archivo deploy.php.

¿Tod@s bien?

Docker

Ejemplo

https://bit.ly/42VwTlb

En el futuro

Deployer es un proyecto con un gran respaldo en la comunidad GitHub, actualmente están trabajando en la nueva versión 7.0.0, dónde implementa un nuevo sistema de archivo de configuración basado en Yaml (.yaml o .yml).

https://bit.ly/453fLvH

Alternativas

¡FIN!

Simplemente, GRACIAS

Gracias