Despliegue
Introducción
Cuando estés listo para desplegar tu aplicación Laravel en producción, hay algunas cosas importantes que puedes hacer para asegurarte de que tu aplicación esté funcionando de la manera más eficiente posible. En este documento, cubriremos algunos puntos de partida excelentes para asegurarte de que tu aplicación Laravel esté desplegada correctamente.
Requisitos del Servidor
El framework Laravel tiene algunos requisitos del sistema. Debes asegurarte de que tu servidor web tenga la siguiente versión mínima de PHP y extensiones:
- PHP >= 8.2
- Extensión PHP Ctype
- Extensión PHP cURL
- Extensión PHP DOM
- Extensión PHP Fileinfo
- Extensión PHP Filter
- Extensión PHP Hash
- Extensión PHP Mbstring
- Extensión PHP OpenSSL
- Extensión PHP PCRE
- Extensión PHP PDO
- Extensión PHP Session
- Extensión PHP Tokenizer
- Extensión PHP XML
Configuración del Servidor
Nginx
Si estás desplegando tu aplicación en un servidor que ejecuta Nginx, puedes usar el siguiente archivo de configuración como punto de partida para configurar tu servidor web. Lo más probable es que este archivo necesite ser personalizado dependiendo de la configuración de tu servidor. Si deseas asistencia en la gestión de tu servidor, considera usar un servicio de gestión y despliegue de servidores de Laravel como Laravel Forge.
Asegúrate de que, como en la configuración a continuación, tu servidor web dirija todas las solicitudes al archivo public/index.php
de tu aplicación. Nunca debes intentar mover el archivo index.php
a la raíz de tu proyecto, ya que servir la aplicación desde la raíz del proyecto expondrá muchos archivos de configuración sensibles a Internet:
server {
listen 80;
listen [::]:80;
server_name example.com;
root /srv/example.com/public;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
index index.php;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
error_page 404 /index.php;
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_hide_header X-Powered-By;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
FrankenPHP
FrankenPHP también puede usarse para servir tus aplicaciones Laravel. FrankenPHP es un servidor de aplicaciones PHP moderno escrito en Go. Para servir una aplicación PHP Laravel usando FrankenPHP, simplemente puedes invocar su comando php-server
:
frankenphp php-server -r public/
Para aprovechar características más poderosas soportadas por FrankenPHP, como su integración con Laravel Octane, HTTP/3, compresión moderna o la capacidad de empaquetar aplicaciones Laravel como binarios independientes, consulta la documentación de Laravel de FrankenPHP.
Permisos de Directorio
Laravel necesitará escribir en los directorios bootstrap/cache
y storage
, por lo que debes asegurarte de que el propietario del proceso del servidor web tenga permiso para escribir en estos directorios.
Optimización
Cuando despliegues tu aplicación en producción, hay una variedad de archivos que deben ser cacheados, incluyendo tu configuración, eventos, rutas y vistas. Laravel proporciona un único y conveniente comando Artisan optimize
que cacheará todos estos archivos. Este comando típicamente debe ser invocado como parte del proceso de despliegue de tu aplicación:
php artisan optimize
El método optimize:clear
puede usarse para eliminar todos los archivos de caché generados por el comando optimize
así como todas las claves en el controlador de caché predeterminado:
php artisan optimize:clear
En la siguiente documentación, discutiremos cada uno de los comandos de optimización granular que son ejecutados por el comando optimize
.
Cachear Configuración
Cuando despliegues tu aplicación en producción, debes asegurarte de ejecutar el comando Artisan config:cache
durante tu proceso de despliegue:
php artisan config:cache
Este comando combinará todos los archivos de configuración de Laravel en un único archivo cacheado, lo que reduce en gran medida el número de viajes que el framework debe hacer al sistema de archivos al cargar tus valores de configuración.
Si ejecutas el comando config:cache
durante tu proceso de despliegue, debes asegurarte de que solo estás llamando a la función env
desde dentro de tus archivos de configuración. Una vez que la configuración ha sido cacheada, el archivo .env
no será cargado y todas las llamadas a la función env
para variables del archivo .env
devolverán null
.
Cachear Eventos
Debes cachear los mapeos de eventos a listeners auto-descubiertos de tu aplicación durante tu proceso de despliegue. Esto puede lograrse invocando el comando Artisan event:cache
durante el despliegue:
php artisan event:cache
Cachear Rutas
Si estás construyendo una aplicación grande con muchas rutas, debes asegurarte de ejecutar el comando Artisan route:cache
durante tu proceso de despliegue:
php artisan route:cache
Este comando reduce todos tus registros de rutas en una única llamada de método dentro de un archivo cacheado, mejorando el rendimiento del registro de rutas al registrar cientos de rutas.
Cachear Vistas
Cuando despliegues tu aplicación en producción, debes asegurarte de ejecutar el comando Artisan view:cache
durante tu proceso de despliegue:
php artisan view:cache
Este comando precompila todas tus vistas Blade para que no sean compiladas bajo demanda, mejorando el rendimiento de cada solicitud que devuelve una vista.
Modo de Depuración
La opción debug
en tu archivo de configuración config/app.php
determina cuánta información sobre un error se muestra realmente al usuario. Por defecto, esta opción está configurada para respetar el valor de la variable de entorno APP_DEBUG
, que se almacena en el archivo .env
de tu aplicación.
En tu entorno de producción, este valor siempre debe ser false
. Si la variable APP_DEBUG
está configurada en true
en producción, corres el riesgo de exponer valores de configuración sensibles a los usuarios finales de tu aplicación.
La Ruta de Salud
Laravel incluye una ruta de verificación de salud incorporada que puede usarse para monitorear el estado de tu aplicación. En producción, esta ruta puede usarse para reportar el estado de tu aplicación a un monitor de tiempo de actividad, balanceador de carga o sistema de orquestación como Kubernetes.
Por defecto, la ruta de verificación de salud se sirve en /up
y devolverá una respuesta HTTP 200 si la aplicación se ha iniciado sin excepciones. De lo contrario, se devolverá una respuesta HTTP 500. Puedes configurar el URI para esta ruta en el archivo bootstrap/app
de tu aplicación:
->withRouting(
web: __DIR__.'/../routes/web.php',
commands: __DIR__.'/../routes/console.php',
health: '/up',
health: '/status',
)
Cuando se realizan solicitudes HTTP a esta ruta, Laravel también despachará un evento Illuminate\Foundation\Events\DiagnosingHealth
, permitiéndote realizar verificaciones de salud adicionales relevantes para tu aplicación. Dentro de un listener para este evento, puedes verificar el estado de la base de datos o caché de tu aplicación. Si detectas un problema con tu aplicación, simplemente puedes lanzar una excepción desde el listener.
Despliegue Fácil con Forge / Vapor
Laravel Forge
Si no estás listo para gestionar tu propia configuración de servidor o no te sientes cómodo configurando todos los diversos servicios necesarios para ejecutar una aplicación Laravel robusta, Laravel Forge es una excelente alternativa.
Laravel Forge puede crear servidores en varios proveedores de infraestructura como DigitalOcean, Linode, AWS y más. Además, Forge instala y gestiona todas las herramientas necesarias para construir aplicaciones Laravel robustas, como Nginx, MySQL, Redis, Memcached, Beanstalk y más.
¿Quieres una guía completa para desplegar con Laravel Forge? Consulta el Laravel Bootcamp y la serie de videos de Forge disponibles en Laracasts.
Laravel Vapor
Si deseas una plataforma de despliegue totalmente sin servidor y con escalado automático ajustada para Laravel, consulta Laravel Vapor. Laravel Vapor es una plataforma de despliegue sin servidor para Laravel, impulsada por AWS. Lanza tu infraestructura Laravel en Vapor y enamórate de la simplicidad escalable de lo sin servidor. Laravel Vapor está ajustado por los creadores de Laravel para trabajar sin problemas con el framework, para que puedas seguir escribiendo tus aplicaciones Laravel exactamente como estás acostumbrado.