Skip to main content

Introducción

Laravel Envoy es una herramienta para ejecutar tareas habituales en servidores remotos. Con la misma sintaxis de Blade puedes definir fácilmente tareas como despliegues o la ejecución de comandos Artisan.
Envoy solo soporta actualmente macOS y Linux. Para usarlo en Windows necesitas hacerlo a través de WSL2.

Instalación

Instala Envoy en el proyecto con el gestor de paquetes Composer.
Tras la instalación, el ejecutable de Envoy quedará disponible en el directorio vendor/bin.

Creación de tareas

Definir una tarea

Las tareas son la unidad básica de Envoy. Una tarea define los comandos de shell que deben ejecutarse en el servidor remoto al lanzarla. Por ejemplo, puedes definir una tarea que ejecute php artisan queue:restart en todos los servidores de workers de cola. Todas las tareas de Envoy se definen en el archivo Envoy.blade.php que está en la raíz de la aplicación.
Como se ve arriba, al principio del archivo defines el array @servers y en la opción on de cada declaración de tarea haces referencia a esos servidores. La declaración @servers debe escribirse siempre en una sola línea. Dentro de la declaración @task describes los comandos de shell que se ejecutarán en el servidor al lanzar la tarea.

Tareas locales

Si indicas 127.0.0.1 como IP del servidor, forzarás la ejecución del script en tu equipo local.

Importar tareas de Envoy

Con la directiva @import puedes importar otros archivos de Envoy y añadir sus stories y tareas a tu propio archivo. Tras la importación, puedes ejecutar las tareas igual que si las hubieras definido en tu archivo Envoy.

Múltiples servidores

Con Envoy puedes ejecutar fácilmente una misma tarea en varios servidores. Primero añade servidores adicionales a la declaración @servers asignándoles un nombre único. Una vez añadidos, enuméralos en el array on de la tarea.

Ejecución en paralelo

Por defecto, las tareas se ejecutan de forma serial en cada servidor. Es decir, cuando una tarea finaliza en el primer servidor, pasa al segundo. Para ejecutar la tarea en paralelo en varios servidores, añade la opción parallel a la declaración.

Setup

Si necesitas ejecutar código PHP arbitrario antes de que se lancen las tareas de Envoy, usa la directiva @setup.
Si necesitas incluir otros archivos PHP antes de ejecutar las tareas, utiliza @include al principio del archivo Envoy.blade.php.

Variables

Al invocar una tarea de Envoy, puedes pasar argumentos desde la línea de comandos.
Dentro de la tarea puedes acceder a las opciones con la sintaxis «echo» de Blade. También puedes usar los if y bucles de Blade. Por ejemplo, para comprobar si existe la variable $branch antes de ejecutar git pull:

Stories

Una story agrupa un conjunto de tareas bajo un nombre cómodo. Por ejemplo, una story deploy puede ejecutar juntas las tareas update-code e install-dependencies.
Una vez escrita la story, puedes invocarla igual que una tarea.

Hooks de finalización

Al ejecutar tareas o stories se ejecutan varios hooks. Los tipos que soporta Envoy son @before, @after, @error, @success y @finished. Todo el código dentro de estos hooks se interpreta como PHP y se ejecuta en local, no en los servidores remotos sobre los que opera la tarea. Puedes definir tantos hooks como quieras, y se ejecutarán en el orden en que aparezcan en el script de Envoy.
El hook @finished recibe el código de estado de la ejecución de las tareas. Es null o un entero mayor o igual que 0.

Ejecutar tareas

Para ejecutar una tarea o story definida en el archivo Envoy.blade.php de la aplicación, ejecuta el comando run de Envoy y pásale el nombre de la tarea o story. Envoy ejecutará la tarea y mostrará la salida del servidor remoto durante la ejecución.

Confirmar la ejecución de la tarea

Si quieres solicitar confirmación antes de ejecutar una tarea concreta en el servidor, añade la directiva confirm a la declaración de la tarea. Es especialmente útil para operaciones destructivas.

Notificaciones

Slack

Envoy puede enviar notificaciones a Slack tras la ejecución de cada tarea. La directiva @slack recibe la URL del webhook de Slack y el nombre del canal (o del usuario). La URL del webhook se obtiene creando una integración «Incoming WebHooks» en el panel de control de Slack. En el primer argumento de @slack pasa la URL completa del webhook. En el segundo indica el nombre del canal (#channel) o del usuario (@user).
Por defecto, se envía al canal un mensaje que describe la tarea ejecutada. Puedes sobrescribirlo con tu propio mensaje pasando un tercer argumento a @slack.

Discord

Envoy también permite enviar notificaciones a Discord tras cada ejecución. La directiva @discord recibe la URL del webhook de Discord y un mensaje. La URL se obtiene creando un «Webhook» en la configuración del servidor y seleccionando el canal de destino.

Telegram

Envoy también admite enviar notificaciones a Telegram tras cada ejecución. La directiva @telegram recibe el ID del bot de Telegram y el Chat ID. El ID del bot se obtiene creando un nuevo bot en BotFather. El Chat ID puede obtenerse con @username_to_id_bot.

Microsoft Teams

Envoy también admite enviar notificaciones a Microsoft Teams tras cada ejecución. La directiva @teams recibe el webhook de Teams (obligatorio), el mensaje, un color de tema (success, info, warning, error) y, opcionalmente, un array de configuración. El webhook de Teams se obtiene creando un Incoming Webhook. La API de Teams tiene muchos más ajustes que te permiten crear tus propias tarjetas de mensaje. Para más detalles consulta la documentación de Microsoft Teams.
Envoy asume conexiones SSH con los servidores remotos. Según tu entorno de ejecución, deberás preparar de antemano la configuración de la autenticación por clave y el control de acceso al servidor. Si necesitas una automatización de despliegue más avanzada, valora la guía de despliegue o la combinación con GitHub Actions.
Última modificación el 2 de agosto de 2026