Automatizaci贸n de Despliegues con Laravel Envoy 馃殌

author

Jos茅 Rafael Gutierrez

hace 1 semana

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:

  1. Acceso SSH configurado en tus servidores para cada entorno (~/.ssh/id_rsa).
  2. Un proyecto Laravel ya desplegado en cada entorno.
  3. Ramas configuradas para cada entornom en nuestro ejemolo usaremos 3:
    • dev para desarrollo.
    • qa para QA.
    • master para 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:

  1. Navegar al directorio del proyecto en el servidor.
  2. Actualizar el c贸digo desde la rama correspondiente usando git pull.
  3. Ejecutar migraciones (opcional).
  4. 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, qa o master).
  • php artisan migrate --force ejecuta las migraciones necesarias en el entorno.
  • php artisan optimize:clear limpia 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

  1. Despliegue en Desarrollo (dev):
envoy run deploy --server=dev
  1. Despliegue en QA:
envoy run deploy --server=qa
  1. 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

  1. Permisos de SSH: Aseg煤rate de que solo los usuarios autorizados tengan acceso a las llaves SSH en ~/.ssh/id_rsa.
  2. Backups y Pruebas en QA: Realiza siempre pruebas en el entorno de QA antes de desplegar cambios en producci贸n.
  3. 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!

Jos茅 Rafael Gutierrez

Soy un desarrollador web con m谩s de 14 a帽os de experiencia, especializado en la creaci贸n de sistemas a medida. Apasionado por la tecnolog铆a, la ciencia, y la lectura, disfruto resolviendo problemas de...

Suscr铆bete para Actualizaciones

Proporcione su correo electr贸nico para recibir notificaciones sobre nuevas publicaciones o actualizaciones.