---
title: "Script para hacer deploy de una aplicación Laravel usando Laravel Envoy"
excerpt: "En este artículo te voy a mostrar como hacer deploy de tu aplicación Laravel en un VPS usando Laravel Envoy, es más sencillo de lo que piensas. 😎"
date: "2023-01-28T15:24:04.000Z"
category: "Laravel"
seo_title: "Deploy de Laravel con Envoy: script completo para VPS"
seo_description: "Automatiza el deploy de Laravel en un VPS con Laravel Envoy. Script Envoy.blade.php que activa modo mantenimiento, hace git pull, instala dependencias, migra y limpia caché en un solo comando."
author:
  name: "angel cruz"
  picture: "https://angelcruzdevcdn.nyc3.cdn.digitaloceanspaces.com/images/me/angel-cruz.png"
ogImage:
  url: "/images/open-graph/laravel-opengraph-image.png"
---

Ok, para iniciar debes tener en cuenta que vas a necesitar ciertos conocimientos de administración de servidores pero no te preocupes que solo necesitas saber como instalar paquetes dentro de tu VPS.

### Lo que vas hacer es:

- Loguarte dentro de tu VPS, haciendo ssh.
- Dentro de tu VPS vas a instalar GIT `sudo apt get install git` (o con el gestor de paquetería de tu servidor, aca asumo que estás usando ubuntu)
- Luego de instalar git tienes que clonar tu proyecto en un directorio específico. Yo te recomendaria clonar el proyecto dentro del directorio home de tu usuario en el VPS, creando una estructura parecida a esta: `/home/USUARIO_VPS/project` 

<div class="not-prose">
	<div class="flex bg-yellow-100 rounded-lg p-4 mb-4 text-sm text-yellow-700 " role="alert">
		<div>
			<p>Nuevamente asumo que tu proyecto lo gestionas con GIT y lo tienes alojado en algún servicio de control de versiones (GITHUB/BITBUCKET)</p>
		</div>
	</div>
</div>

Luego de esto lo único que tienes que hacer es ingresar a tu proyecto y hacer todo lo necesario para instalar las dependencias (composer) y hacer las configuraciones para la base de datos y todo lo que necesites.

En este punto, si sigues mi recomendación de clonar el proyecto en tu directorio home el siguiente paso es cambiar el path del directorio root en el archivo de configuración de tu servidor web, nuevamente asumiendo que usas NGINX el cambio lo debes hacer en la siguiente línea

```
server {
    listen 80;
    listen [::]:80;
    server_name example.com;
    root /home/USUARIO_VPS/project/public; [tl! focus]
 
    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-Content-Type-Options "nosniff";
 
    // ...
}
```

### En tu proyecto

Vas a instalar envoy como una dependencia de desarrollo de la siguiente forma:

```shell
composer require laravel/envoy --dev
```

Luego de esto, debes crear un archivo `Envoy.blade.php` donde vas a incluir la siguiente información:

```shell
@servers(['main' => ['user@host_ip']])

@task('deploy', ['on' => 'main'])
    cd /home/USUARIO_VPS/project
    php artisan down
    git pull origin master
    composer install --optimize-autoloader --no-interaction --no-plugins --no-scripts --no-dev
    php artisan migrate --force
    php artisan cache:clear
    php artisan config:cache
    php artisan view:cache
    composer dumpautoload -o
    php artisan up
@endtask
```

Los cambios que debes implementar son los siguientes:

- Modificar el usuario y el host ip
- Listo 🤣

Lo que hace el archivo creo que se explica solo pero por si acaso:

- Ingresa al directorio del proyecto
- Activa el modo mantenimiento
- Hace un pull a tu proveedor de control de versiones para bajar los cambios mas recientes
- Hace composer install para instalar las dependencias del proyecto (no incluye dependencias de desarrollo)
- Ejecuta las migraciones (si existe algo para migrar)
- Limpia y crea el cache 
- Optimiza el autoload de composer
- Sale del modo de mantenimiento

<div class="not-prose">
	<div class="flex bg-yellow-100 rounded-lg p-4 mb-4 text-sm text-yellow-700 " role="alert">
		<div>
			<p>Obviamente puedes agregar muchas cosas al archivo de configuración de Envoy pero mi recomendación es que lo mantengas lo más simple posible para así evitar tiempos altos de down time.</p>
		</div>
	</div>
</div>

Para ejecutar envoy puedes hacer lo siguiente:

```shell
php vendor/bin/envoy
```

Espero que te sirva.

---

## Sitemap

Índice completo del sitio: [/sitemap.md](https://angelcruz.dev/sitemap.md)

Canónico HTML: [https://angelcruz.dev/post/script-para-hacer-deploy-de-una-aplicacion-laravel-usando-laravel-envoy](https://angelcruz.dev/post/script-para-hacer-deploy-de-una-aplicacion-laravel-usando-laravel-envoy)
