Saltar al contenido principal

Introducción

Al desplegar una aplicación Laravel en producción, es necesario prepararla para que funcione con la mayor eficiencia posible. Esta guía explica los aspectos clave para realizar despliegues de producción de forma fiable.

Flujo de despliegue

Requisitos del servidor

El framework Laravel tiene los siguientes requisitos del sistema. Necesitas PHP 8.3 o superior y las siguientes extensiones de PHP.
ExtensiónDescripción
CtypeComprobación de tipos de caracteres
cURLComunicación HTTP
DOMManipulación del DOM de XML/HTML
FileinfoDetección de tipo MIME
FilterFiltrado de datos
HashFunciones hash
MbstringProcesamiento de cadenas multibyte
OpenSSLCifrado
PCREExpresiones regulares
PDOConexión a base de datos
SessionGestión de sesiones
TokenizerAnálisis de tokens de PHP
XMLProcesamiento XML

Configuración del servidor

Nginx

Si usas Nginx, parte del siguiente archivo de configuración. Es esencial reenviar todas las solicitudes a public/index.php. No muevas index.php a la raíz del proyecto: expondrías archivos de configuración sensibles.
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 ~ ^/index\.php(/|$) {
        fastcgi_pass unix:/var/run/php/php8.3-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 es un servidor de aplicaciones PHP moderno escrito en Go. Puedes iniciar una aplicación Laravel solo con este comando:
frankenphp php-server -r public/
Para funcionalidades avanzadas como HTTP/3, compresión moderna, integración con Laravel Octane o binarios autónomos, consulta la documentación de Laravel en FrankenPHP.

Permisos de directorios

Laravel necesita escritura en los directorios bootstrap/cache y storage. Configura los permisos para que el propietario del proceso del servidor web pueda escribir en ellos.
chmod -R 775 storage bootstrap/cache
chown -R www-data:www-data storage bootstrap/cache

Optimización

Al desplegar en producción, mejora el rendimiento cacheando configuración, eventos, rutas y vistas. Puedes cachearlo todo de golpe con optimize.
php artisan optimize
Para limpiar la caché usa optimize:clear.
php artisan optimize:clear

Comandos de optimización individuales

optimize ejecuta los siguientes comandos en bloque. También puedes ejecutarlos por separado si es necesario.
ComandoDescripción
php artisan config:cacheCombina los archivos de configuración en uno y los cachea
php artisan event:cacheCachea el mapeo eventos → listeners
php artisan route:cacheCachea la definición de rutas y acelera su registro
php artisan view:cachePrecompila las vistas Blade y acelera las solicitudes
Después de ejecutar config:cache, llama a env() únicamente dentro de los archivos de configuración. Una vez cacheado, el archivo .env deja de leerse, y si llamas a env() fuera de los archivos de configuración devolverá null.

Recarga de servicios

Tras desplegar una nueva versión, los servicios de larga duración como workers de cola, Laravel Reverb o Laravel Octane necesitan reiniciarse para usar el nuevo código.
php artisan reload
Este comando finaliza los servicios recargables. Asegúrate de tener un monitor de procesos (como Supervisor) que los reinicie automáticamente.
Si utilizas Laravel Cloud, la recarga elegante de todos los servicios se gestiona automáticamente, por lo que no necesitas el comando reload.

Modo debug

La opción debug de config/app.php controla cuánta información de error se muestra al usuario. Por defecto usa el valor de la variable de entorno APP_DEBUG del archivo .env.
En producción, APP_DEBUG debe ser siempre false. Si APP_DEBUG=true en producción, hay riesgo de exponer valores sensibles como credenciales de base de datos o claves privadas al usuario final.
# .env (producción)
APP_DEBUG=false

Ruta de health check

Laravel incluye una ruta de health check para monitorizar el estado de la aplicación. Se integra con monitores de uptime, balanceadores de carga y sistemas de orquestación como Kubernetes. Por defecto se expone el endpoint /up, que devuelve 200 si la aplicación arrancó correctamente o 500 si ocurrió una excepción durante el arranque. Puedes personalizar el URI en bootstrap/app.php.
->withRouting(
    web: __DIR__.'/../routes/web.php',
    commands: __DIR__.'/../routes/console.php',
    health: '/status', // Por defecto es /up
)
Cuando se accede a esta ruta se emite el evento Illuminate\Foundation\Events\DiagnosingHealth, por lo que puedes implementar comprobaciones adicionales (base de datos, caché, etc.) en un listener.

Despliegue con Laravel Cloud o Forge

Laravel Cloud

Si buscas una plataforma de despliegue totalmente gestionada con autoescalado, Laravel Cloud es la opción recomendada. Es una PaaS optimizada para Laravel que ofrece compute, base de datos, caché y almacenamiento de objetos gestionados. Está afinada directamente por el equipo de desarrollo de Laravel y se integra con el framework de forma transparente.

Laravel Forge

Si prefieres gestionar tus propios servidores pero sin dedicar tiempo a instalar servicios como Nginx o MySQL, Laravel Forge es de gran ayuda. Crea servidores en los principales proveedores cloud (DigitalOcean, Linode, AWS, etc.) e instala y gestiona automáticamente herramientas como Nginx, MySQL, Redis, Memcached, Beanstalk y más.

Próximos pasos

Despliegue — Documentación oficial

Consulta la documentación oficial para conocer los últimos detalles de configuración de despliegue.
Última modificación el 13 de julio de 2026