Automatizaci贸n de Despliegues con Laravel Envoy 馃殌
Introducci贸n
Laravel Envoy es una herramienta sencilla y poderosa que permite automatizar tareas de despliegue y administraci贸n de servidores en entornos de desarrollo y producci贸n. Con una sintaxis limpia similar a Blade, Envoy facilita la ejecuci贸n de tareas remotas en uno o varios servidores sin complicaciones. En este art铆culo, veremos c贸mo instalar, configurar y ejecutar comandos con Laravel Envoy, adem谩s de explorar algunos ejemplos pr谩cticos para automatizar el despliegue de aplicaciones.
Prerrequisitos
Antes de empezar, aseg煤rate de contar con:
-
Acceso SSH configurado en tus servidores para cada entorno (
~/.ssh/id_rsa). - Un proyecto Laravel ya desplegado en cada entorno.
-
Ramas configuradas para cada entornom en nuestro ejemolo usaremos 3:
-
devpara desarrollo. -
qapara QA. -
masterpara producci贸n.
-
Paso 1: Instalaci贸n de Envoy en el Proyecto
Para instalar Envoy solo en el proyecto, agrega la dependencia de desarrollo ejecutando el siguiente comando:
composer require laravel/envoy --dev
Esto agregar谩 Envoy a tu proyecto, permiti茅ndote ejecutarlo solo dentro del contexto de este proyecto y asegurando que cada entorno o desarrollador tenga la misma versi贸n.
Paso 2: Crear el Archivo Envoy.blade.php
En el directorio ra铆z de tu proyecto, crea un archivo llamado Envoy.blade.php. Este archivo ser谩 el n煤cleo de las configuraciones de despliegue para los entornos dev, QA y prod.
touch Envoy.blade.php
Paso 3: Configuraci贸n de los Entornos
Define los entornos en el archivo Envoy.blade.php utilizando la anotaci贸n @servers para especificar las direcciones IP de cada servidor y el usuario SSH para conectarte. En este ejemplo, usaremos user@your-server-ip y la llave SSH en ~/.ssh/id_rsa.
Ejemplo de Configuraci贸n
@servers([
'dev' => 'user@dev-your-server-ip',
'qa' => 'user@qa-your-server-ip',
'prod' => 'user@prod-your-server-ip',
])
@setup
// Directorio donde est谩 alojado el proyecto en cada servidor
$appDir = '/var/www/laravel-project';
// Ramas de Git correspondientes a cada entorno
$branches = [
'dev' => 'dev',
'qa' => 'qa',
'prod' => 'master',
];
// Obtener el entorno en el que se va a ejecutar el despliegue
if (!isset($server)) {
throw new Exception("El entorno no est谩 definido. Usa --server=dev|qa|prod");
}
@endsetup
Con esta configuraci贸n, @servers define los accesos SSH para cada entorno y @setup establece el directorio base del proyecto y las ramas correspondientes.
Paso 4: Crear las Tareas de Despliegue
Configura las tareas de despliegue para cada entorno. Estas tareas realizar谩n las siguientes acciones:
- Navegar al directorio del proyecto en el servidor.
-
Actualizar el c贸digo desde la rama correspondiente usando
git pull. - Ejecutar migraciones (opcional).
- Limpiar el cach茅 de la aplicaci贸n para asegurar que los cambios se apliquen correctamente.
Tarea de Despliegue
@task('deploy', ['on' => $server])
echo "Iniciando despliegue en el entorno: {{ $server }}...";
cd {{ $appDir }};
git pull origin {{ $branches[$server] }};
echo "Ejecutando migraciones...";
php artisan migrate --force;
echo "Limpiando cach茅...";
php artisan optimize:clear;
echo "Despliegue completado para el entorno {{ $server }}.";
@endtask
En esta tarea:
-
git pull origin {{ $branches[$server] }}actualiza el c贸digo en funci贸n de la rama especificada para el entorno (dev,qaomaster). -
php artisan migrate --forceejecuta las migraciones necesarias en el entorno. -
php artisan optimize:clearlimpia el cach茅 para aplicar cualquier cambio de configuraci贸n o de c贸digo.
Paso 5: Otras Tareas Comunes
Adem谩s de la tarea de despliegue, puedes configurar otras tareas para manejar aspectos espec铆ficos de tu aplicaci贸n, como limpiar el cach茅 o generar un sitemap. Estas tareas adicionales facilitan la administraci贸n y el mantenimiento de la aplicaci贸n.
Limpiar Cach茅
@task('cache:clear', ['on' => $server])
echo "Limpiando cach茅 en el entorno {{ $server }}...";
cd {{ $appDir }};
php artisan optimize:clear;
echo "Cache limpiado en {{ $server }}.";
@endtask
Generar Sitemap
@task('sitemap:generate', ['on' => $server])
echo "Generando sitemap en el entorno {{ $server }}...";
cd {{ $appDir }};
php artisan sitemap:generate;
echo "Sitemap generado en {{ $server }}.";
@endtask
Paso 6: Ejecuci贸n de las Tareas
Para ejecutar las tareas de despliegue, usa el comando envoy run seguido de la tarea que quieres ejecutar y el entorno (--server=dev, --server=qa o --server=prod).
Ejemplo de Ejecuci贸n
- Despliegue en Desarrollo (dev):
envoy run deploy --server=dev
- Despliegue en QA:
envoy run deploy --server=qa
- Despliegue en Producci贸n (prod):
envoy run deploy --server=prod
De forma similar, puedes ejecutar las tareas de limpieza de cach茅 o generaci贸n de sitemap en cualquier entorno:
envoy run cache:clear --server=qa
envoy run sitemap:generate --server=prod
Consejos de Seguridad
-
Permisos de SSH: Aseg煤rate de que solo los usuarios autorizados tengan acceso a las llaves SSH en
~/.ssh/id_rsa. - Backups y Pruebas en QA: Realiza siempre pruebas en el entorno de QA antes de desplegar cambios en producci贸n.
- Entornos Segregados: Cada entorno debe tener su propia base de datos y configuraciones para evitar problemas de sobreescritura de datos o conflictos.
Conclusi贸n
Con Laravel Envoy puedes simplificar y automatizar el despliegue de tus aplicaciones en m煤ltiples entornos. Este ejemplo muestra c贸mo configurar un entorno de despliegue eficiente y seguro en servidores de desarrollo, QA y producci贸n, controlando las ramas correspondientes y utilizando comandos personalizados para administrar la aplicaci贸n.
Para proyectos de mayor escala, Envoy es una herramienta que ayuda a ahorrar tiempo y minimizar errores, proporcionando un flujo de despliegue organizado y repetible en m煤ltiples entornos. 隆Prueba Envoy en tu proyecto y ver谩s los beneficios de la automatizaci贸n en acci贸n!