Laravel a producción/deployment mediante Apache y MySQL

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 dependendiendo 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

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.

 

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

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.

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>'),

.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.

Conclusión

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.

- Andrés Cruz

In english

Este material forma parte de mi curso y libro completo; puedes adquirirlos desde el apartado de libros y/o cursos Curso y Libro Laravel 11 con Tailwind Vue 3, introducción a Jetstream Livewire e Inerta desde cero - 2024.

Andrés Cruz

Desarrollo con Laravel, Django, Flask, CodeIgniter, HTML5, CSS3, MySQL, JavaScript, Vue, Android, iOS, Flutter

Andrés Cruz En Udemy

Acepto recibir anuncios de interes sobre este Blog.

!Cursos desde!

10$

En Udemy

Quedan 3d 18:57!


Udemy

!Cursos desde!

4$

En Academia

Ver los cursos

!Libros desde!

1$

Ver los libros
¡Hazte afiliado en Gumroad!