Laravel a producción/deployment mediante Apache y MySQL

Video thumbnail

Índice de contenido

Una vez terminada la implementación de tu estupendo proyecto en Laravel, seguramente lo siguiente que vas a querer hacer es mostrárselo a todos, es decir, llevarlo a producción o hacer el deployment, para ello, los pasos que tienes que seguir no difieren mucho de cualquier otro proyecto de PHP, independientemente si este proyecto es un framework o no, pero, en este capítulo veremos algunas consideraciones que puedes tener en cuenta, es importante recordar que hay muchas formas de hacer lo mismo y los pasos pueden variar dependiendo de las opciones brindadas por el  hosting que estés empleando.

El servidor por excelencia empleando para publicar o servir un proyecto en Laravel en un hosting es Apache, Laravel puede ser servida de varias maneras:

https://laravel.com/docs/master/deployment

Pero, si revisamos el mercado actual, la mayoría de los hostings cuentan con al menos las siguientes características para el plan básico, que es el más económico:

  1. PHP
  2. MySQL
  3. Apache

Qué necesitas antes de desplegar Laravel en Apache

Requisitos mínimos de servidor (PHP, extensiones y versiones)

Laravel es exigente con el entorno, y eso es bueno. Para versiones actuales necesitas:

PHP 8.2 o superior

Extensiones comunes: mbstring, openssl, pdo, xml, curl, fileinfo, etc.

Servidor web: Apache

Base de datos: MySQL o compatible

Composer

(Opcional pero habitual) Node.js

Si tu hosting no soporta PHP 8.2, el problema no es Laravel. En mi caso, esto fue el principal motivo para abandonar un hosting antiguo que simplemente no me permitía usar Laravel 11 o superior.

Lo primero que debes hacer en estos casos es verificar las versiones mínimas, usualmente la más importante es la de PHP que para la versión actual del framework es la de 8.2 o superior, si tu hosting no cuenta con la versión mínima de PHP, no podrás emplear la versión 11 o superior, en estos casos, puedes emplear una versión inferior del framework alguna que sea soportara por el hosting y esta es la primera recomendación que debes de tener en cuenta. De igual manera, si tienes dudas, puedes consultar al hosting que deseas contratar si tiene soporte para Laravel.

Una de las grandes ventajas y desventajas de Laravel es que las últimas versiones usualmente emplean versiones modernas de PHP, esto es bueno ya que podemos emplear todas las características modernas y correcciones a fallas de seguridad, pero también es una desventaja ya que muchas veces no es posible emplear las últimas versiones de PHP o simplemente el hosting no ha actualizado a estas últimas versiones.

Hosting compartido vs VPS: qué debes tener en cuenta

Los tutoriales suelen asumir VPS con Ubuntu limpio. La realidad es que muchos proyectos viven en:

  • Hosting compartido
  • cPanel
  • FTP
  • public_html

Y sí, Laravel funciona perfectamente en hosting compartido, siempre que:

  • Soporte la versión correcta de PHP
  • Permita configurar el DocumentRoot o usar .htaccess

De hecho, tras migrar mi blog en Laravel 13 a un hosting moderno, el rendimiento mejoró notablemente sin tocar una sola línea de código.

Compatibilidad de Laravel con versiones antiguas de PHP

Laravel avanza rápido. Eso tiene una ventaja clara (seguridad, rendimiento) y una desventaja: no todos los hostings siguen el ritmo.

Si tu hosting solo llega a PHP 7.4:

  • No podrás usar Laravel 12 o superior
  • Tendrás que bajar de versión o cambiar de proveedor

Mi recomendación es clara: elige primero el hosting y luego la versión de Laravel, no al revés.

Quedando claro el aspecto principal que tenemos que tener en cuenta al momento de publicar nuestro proyecto, vamos a tratar otro punto importante, Node.

Integración con Node

Como se ha venido comentando, una de las diferencias fundamental que tenemos en Laravel con respecto a otros frameworks, es que tenemos una integración con Node de manera directa, podemos agregar tecnologías del lado del cliente (o del servidor si lo requieres) fácilmente con Node, instalar React, Vue o Angular para desarrollar nuestras aplicaciones; por ejemplo, supone que también tenemos una integración con Vue, como enseñamos en el libro, antes de publicar, recuerda también ejecutar el comando para generar los archivos del cliente a producción, que usualmente es el de:

$ npm run build

Y automáticamente, debes de probar el desarrollo realizado en Node, que debería de funcionar de igual manera que cuando estabas en ambiente de desarrollo:

$ npm run dev

Si la aplicación fue desarrollada correctamente, en caso de que tengas un error, debes de corregirlo y ejecutar el comando de:

$ npm run build

Nuevamente.

Los comandos empleados para generar los builds los puedes consultar desde:

package.json

Aunque usualmente con los dos anteriores es suficiente.

Ya hemos empleado el comando de dev que es el empleado al momento del desarrollo, para producción debes de usar el de build; con esto, ya se generarán los archivos de salida en la carpeta de public.

Archivos y carpetas a publicar

El siguiente punto que tenemos que tener en cuenta es que vamos a llevar a producción, debemos de publicar todo el proyecto salvo la carpeta de node_modules.

Con especial interés a la carpeta vendor, que es donde se encuentran las librerías y paquetes que conforman el proyecto incluyendo el mismo framework de Laravel que tiene a ser bastante grande, la carpeta de los módulos de node solo se emplea en fase de desarrollo.

Simplifica o descarta el archivo .env

Como comentamos anteriormente evita en la mayoría de lo posible emplear las variables de entorno en el .env, en caso de que sea imprescindible para ti, puedes emplearlo pero, simplifica el mismo lo más que puedas. 

Subir el proyecto al hosting

Ya en este punto estamos dando por hecho de que tienes un hosting contratado, en el panel de administración de los hostings, existe un apartado para manejar las conexiones FTPs, las cuales nos permitirán subir cada una de las carpetas y archivos del proyecto según lo listado anteriormente, así que, debes de crearte una cuenta desde el Cpanel de tu hosting.

Y con estos datos, puedes emplear un cliente FTP como FileZilla, en el cual, en el apartado de:

  • Archivos - Gestor de sitios 

Puedes colocar las credenciales especificadas por tu hosting y usuario; con esto, es posible realizar una conexión y subir todos los archivos del proyecto, usualmente debes de subirlo en la carpeta de public_html o www, seguramente tendrás varias carpetas en el hosting, pero, debe haber alguna de ella en la cual te señalan con un archivo como el siguiente:

  • /domains/<YourDomain>/DO_NOT_UPLOAD_HERE
  • /domains/<YourDomain>/public_html

Donde puedes realizar la carga de los archivos y donde no, usualmente debes de arrojar todo el contenido del proyecto en la raíz de este directorio, y esto es, para que, desde el dominio configurado al servidor, tengas acceso directo sin estar concatenando la carpeta o carpetas en la URL del dominio; por ejemplo:

  • /domains/<YourDomain>/public_html/laravelproject
  • YourDomain.com/laravelproject

Hay algunos servidores como iPage en los cuales puedes colocar un pointer para poder colocar la carpeta raíz del proyecto en el dominio, y de esta forma es más fácil organizar varios proyectos en un mismo servidor ya que, puedes apuntar el dominio no a la raíz del servidor si no a una carpeta específica dentro de este.

Aquí puedes ver cómo queda el proyecto al subir el mismo en Hostinger:

Archivos del proyecto en FileZilla

Terminar configuración del proyecto

Entorno de producción y configuración inicial

En este punto, debes de tener en el hosting todos los archivos y carpetas del proyecto, como recomendación, mantén activo el ambiente de desarrollo para ver los errores del proyecto tal cual lo tenemos hasta este punto:

.env

APP_ENV=local 
APP_DEBUG=true

Ya que, con esto podremos verificar rápidamente cuando sucede un error, también, recuerda que cuando tienes el proyecto en producción, Laravel genera un log de errores en:

storage/logs/laravel.log

Como recomendación adicional, intenta mantener todas las configuraciones posibles en sus correspondientes archivos y prescindir del .env que si bien es cierto que se puede emplear tanto en ambiente de desarrollo como de producción, al ser más propenso a errores o de eliminar o cambiar alguna clave valor por error o de simplemente ser eliminado por error.

Esto puede traer consecuencias fatales para tu aplicación y fallar de manera catastrófica; al manejar las configuraciones del en sus archivos correspondientes, hacen que la aplicación sea más segura para evitar este tipo de situaciones.

Permisos y seguridad en Laravel con Apache

Laravel necesita escribir en:

  • storage
  • bootstrap/cache

Si no, fallará.

Activar y desactivar el modo debug correctamente

  • Actívalo solo para pruebas
  • Desactívalo siempre al final

Gestión del archivo .env en producción

Aquí tengo una opinión clara basada en experiencia:
cuanto menos dependas del .env en producción, mejor.

No digo no usarlo, sino:

  • Simplificarlo al máximo
  • Evitar configuraciones críticas dispersas

He visto aplicaciones romperse simplemente porque alguien borró o editó mal un .env.

Configurar la base de datos

Desde tu hosting, debes de crear una base de datos y ejecutar la de tu proyecto que, al ser una aplicación a producción, debes de decidir qué registros eliminas y cuales mantienes para producción; el proceso comienza exportando la base de datos desde tu proyecto, para esto, puedes emplear cualquier cliente como los que empleamos en este libro como lo son HeidiSQL o TablePlus y lo exportas en formato SQL.

Luego, con esta base de datos exportada, el siguiente paso es crear una base de datos vacía en el hosting para la posterior ejecución del SQL anteriormente generado, al momento de crear la base de datos, recuerda colocar los datos de conexión en el proyecto en producción:

config\database.php

'mysql' => [
    'driver' => 'mysql',
    'url' => env('DB_URL'),
    'host' => env('DB_HOST', '127.0.0.1'),
    'port' => env('DB_PORT', '3306'),
    'database' => env('DB_DATABASE', '<YourDB>'),
    'username' => env('DB_USERNAME', '<YourUsername>'),
    'password' => env('DB_PASSWORD', '<YourPassword>'),

Importar la base de datos desde local

Exporta desde local en SQL y luego impórtala en producción usando:

  • phpMyAdmin
  • HeidiSQL
  • TablePlus

Configurar la base de datos en producción

Crear la base de datos en el hosting

Desde el panel:

  • Crea la base
  • Crea el usuario
  • Asigna permisos

.htaccess

Posiblemente, si intentas ingresar a la aplicación desde el dominio en producción, veras un error de 403 o similar, esto es debido a que los únicos archivos públicos se encuentran dentro de la carpeta public, que se encuentra en la raíz del proyecto, necesitamos un mecanismo para decirle a Apache que el archivo de arranque del framework, el index.php se encuentra dentro de la carpeta public y no en la raíz, para ello, definimos el siguiente contenido dentro del .htaccess:

.htaccess

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^(.*)$ public/$1 [L]
</IfModule>

Con esta configuración lista, ya debería de funcionar la aplicación con normalidad.

Dependencias PHP: carpeta vendor y Composer

En producción necesitas la carpeta vendor, sí o sí. Ahí está Laravel y todas sus dependencias.

Opciones:

  • Subir vendor por FTP
  • O ejecutar composer install --no-dev en el servidor

Lo que no debes subir nunca:

  • node_modules

Archivos y carpetas que debes subir al servidor: Qué carpetas subir y cuáles no

Debes subir todo el proyecto, excepto:

  • node_modules

Especial atención a:

  • vendor
  • storage
  • bootstrap/cache

Estructura correcta del proyecto en el hosting

Normalmente trabajarás con rutas como:

/domains/tu-dominio/public_html

Lo ideal es que el proyecto esté en la raíz o que el dominio apunte directamente a la carpeta correcta.

Evita escenarios como:

tudominio.com/laravelproject

Siempre que sea posible.

Ubicación correcta en public_html o www

Algunos hostings permiten punteros de dominio. Esto es ideal si manejas varios proyectos en el mismo servidor y quieres orden.

No todos lo permiten, pero cuando existe, úsalo.

Configurar Apache correctamente para Laravel
DocumentRoot apuntando a la carpeta public

Regla de oro:

Apache debe apuntar SIEMPRE a la carpeta public

Nunca muevas index.php fuera de public.

Esto no solo rompe cosas: expone archivos sensibles.

Este error aparece mucho en foros, y siempre lleva a problemas.

Configuración del VirtualHost en Apache

Usualmente NO tienes que tocar nada de esto, pero, dependiendo de tu hosting puede que si, te dejo un ejemplo:

<VirtualHost *:80>
   ServerName tudominio.com
   DocumentRoot /var/www/laravel/public
   <Directory /var/www/laravel/public>
       AllowOverride All
       Require all granted
   </Directory>
</VirtualHost>

Cada proyecto debe tener su propio VirtualHost. Si no, acabarás rompiendo otros proyectos, como pasa a menudo cuando Apache “redirige todo” al mismo sitio.

⭐️ Hostinger, el mejor hosting para Laravel

Hostinger es el hosting del momento, y no es por modismo, es un hosting realmente bueno, con muchas opciones para personalizar nuestra experiencia y económico, es decir, es el mejor hosting calidad precio, y lo mejor de todo, es que lo podemos emplear para publicar o hacer el deployment de nuestra aplicación en Laravel.

He migrado mi blog (creado en la última versión de Laravel, la 11) a Hostinger, y la experiencia ha sido superior a la que tuve con mi hosting anterior, iPage.

  • Experiencia Personal: Estuve años con iPage, y aunque al principio fue bueno, los últimos meses fueron pésimos: problemas de velocidad, caídas inesperadas y un precio muy alto. Además, no permitía actualizar a Laravel 11 debido a la desactualización de su entorno.
  • Ahorro y Valor: Pagué aproximadamente 360 € por 4 años en Hostinger. En contraste, iPage me costaba $160 anuales.

Si buscas un hosting que cumpla con los requisitos modernos de PHP y ofrezca personalización a un costo bajo, Hostinger es mi recomendación principal.

  • Compatibilidad: Si soporta Laravel, soporta cualquier framework con menores requisitos, como CodeIgniter 4.
  • Garantía: Si no te convence, tienes 30 días para solicitar una devolución completa de tu dinero.

✨ Ventajas de Emplear Hostinger con Laravel

Hostinger es una opción excelente para alojar aplicaciones web basadas en PHP, incluso con su plan compartido (el más económico). Aquí tienes las principales razones:

  • Rendimiento Impresionante (LiteSpeed)
    • Hostinger utiliza servidores LiteSpeed, lo que garantiza un procesamiento muy rápido de solicitudes HTTP/2. Esto es crucial para el SEO, ya que una carga rápida de la página mejora tu posicionamiento en Google y otros motores de búsqueda.
  • Compatibilidad con las Últimas Versiones de PHP y MySQL
    • Una de las mejores características es su soporte constante para las últimas versiones de PHP y MySQL. Esto es fundamental porque Laravel siempre se mantiene a la vanguardia con las versiones más recientes de PHP.
  • Seguridad
    • Hostinger ofrece una excelente seguridad, incluyendo el escaneo de malware a nivel de aplicación para los archivos cargados.
  • Excelente Calidad-Precio
    • Ofrece una relación inigualable entre el costo y las prestaciones que proporciona.

Características y Herramientas

Usar Hostinger es muy fácil, ya que cuenta con todas las herramientas necesarias para la administración de nuestras aplicaciones:

  • Base de Datos y Administración: Incluye servidores MySQL con administración vía PHPMyAdmin.
  • Servidor Web: Utiliza el servidor Apache.
  • Configuración Flexible: Permite variar fácilmente las versiones de PHP y MySQL, así como gestionar las extensiones (DLLs).
  • Panel de Control: Su panel de control es agradable y fácil de usar, con muchas opciones personalizadas.
  • Soporte: Su atención al cliente es rápida, aunque, como ocurre en muchas plataformas, usualmente no proveen información altamente técnica para proyectos específicos de PHP.

Si quieres obtener Hostinger a un precio especial, te dejo mi enlace de referido: https://hostinger.es?REFERRALCODE=1ANDRS96

Errores comunes en Apache (403, rutas rotas, Index Of)

Los errores más comunes que veo:

  • 403 Forbidden
  • Apache mostrando Index Of
  • Rutas que no funcionan

En el 90% de los casos:

  • DocumentRoot mal configurado
  • .htaccess no leído
  • Permisos incorrectos

Subir el proyecto al hosting (FTP y cPanel)

Crear credenciales FTP desde el panel

Desde cPanel o panel propio del hosting:

  • Crea usuario FTP
  • Limita acceso a la carpeta correcta

Subida del proyecto con FileZilla

FileZilla sigue siendo suficiente:

  • Arrastra carpetas
  • Verifica que todo se subió correctamente

Aquí es donde muchos errores nacen: subidas incompletas.

Dominios, subdominios y punteros

Si puedes apuntar un dominio directamente a /public, hazlo.

Te ahorrará configuraciones extra y errores.

Optimizar Laravel en producción

Caché de configuración, rutas y vistas

En producción ejecuto siempre:

$ php artisan optimize

Mejora notablemente el rendimiento.

Comandos Artisan recomendados

  • config:cache
  • route:cache
  • view:cache

Rendimiento en Apache: Aquí noté una diferencia clara tras migrar de hosting: Laravel no era lento, el servidor sí lo era.

Elección de hosting para Laravel con Apache

Problemas habituales en hostings antiguos

  • PHP desactualizado
  • Caídas
  • Poca flexibilidad
  • Precios altos

Exactamente lo que me pasó tras años usando un proveedor que no evolucionó.

Qué debe ofrecer un hosting moderno para Laravel

  • PHP actualizado
  • Buen rendimiento
  • Configuración flexible
  • Precio razonable

Por qué un hosting compatible con Laravel lo soporta todo

Si soporta Laravel, soporta cualquier framework PHP con menos requisitos. Así de simple.

Preguntas frecuentes sobre Laravel deployment en Apache

  • ¿Es seguro mover el index.php fuera de public?
    • No. Nunca.
  • ¿Laravel funciona bien en hosting compartido?
    • Sí, perfectamente, si el entorno es correcto.
  • ¿Apache o Nginx para Laravel?
    • Ambos funcionan. Apache sigue siendo muy común en hosting.
  • ¿Por qué Laravel falla en producción y no en local?
    • Casi siempre por entorno, no por código.

Conclusión: cómo hacer un deployment de Laravel sólido en Apache

Los pasos mostrados en este capítulo son de carácter informativo y pasa ser tomadas como referencia para cuando quieres servir tu proyecto a producción, sin embargo, dependiendo del proyecto y el hosting que vayas a emplear, puede que tengas que emplear más configuraciones o variar las aquí especificadas.

Hacer Laravel deployment con Apache no es complicado, pero sí requiere entender el entorno real donde se va a ejecutar la aplicación. La mayoría de los problemas no vienen de Laravel, sino del hosting, de Apache mal configurado o de expectativas irreales.

Si eliges bien el servidor, preparas el proyecto correctamente y respetas la estructura de Laravel, funciona y funciona muy bien en producción.

Si quieres saber como puedes hacer el deploy en Docker mediante Railway de una aplicación en Laravel.

Acepto recibir anuncios de interes sobre este Blog.

Lanzar tu app en Laravel en producción o hacer el deployment, para ello, los pasos que tienes que seguir no difieren mucho de cualquier otro proyecto de PHP, veamos los pasos que debes de tener en cuenta.

| 👤 Andrés Cruz

🇺🇸 In english