Hola!, Laravel es sin duda alguna un increíble framework PHP, que nos facilita el desarrollo y guía a utilizar buenas prácticas de desarrollo, el desarrollo de un proyecto en Laravel es bastante sencillo de realizar, dependiendo de el tamaño del proyecto tendrá cierta dificultad, pero sin duda alguna ya se un proyecto básico muy simple como uno muy complejo, éste no sirve de nada si no lo subimos a un servidor a producción y para ello que mejor que utilizar Forge, por lo que te invito a ver como instalar un proyecto Laravel 5.4 en esta plataforma.
Este artículo utiliza beanstalkd el cual Forge lo ha quitado por defecto desde el 20 de Mayo del 2020, aún así es posible utilizarlo, sólo se debe configurar manualmente en el servidor.
1- Instalar agregando al composer.json
"pda/pheanstalk": "^3.1",
y ejecutamos en nuestra terminal
composer update
2- Dejar archivo .env
CACHE_DRIVER=redis SESSION_DRIVER=redis QUEUE_DRIVER=beanstalkd REDIS_HOST=127.0.0.1 REDIS_PASSWORD=null REDIS_PORT=6379
3- Crear nuevo worker en Forge Laravel
En la opción Queue forge nos indica automáticamente la palabra default, esto es por que en nuestro archivo queue.php de nuestro proyecto Laravel ubicado en
config/queue.php
tenemos lo siguiente en donde queue es default
'beanstalkd' => [ 'driver' => 'beanstalkd', 'host' => 'localhost', 'queue' => 'default', 'ttr' => 60, ],
Si en nuestro proyecto utilizamos otro nombre para éste debemos cambiarlo en Forge a la hora de crear el nuevo worker.
Si tendran varias aplicaciones Laravel funcionando en el servidor con Queue’s, les recomiendo encarecidamente que primero en nuestro archivo
config/queue.php
cambiemos el valor
'queue' => 'default',
por uno acorde al sitio por ejemplo
'queue' => 'sitiouno',
teniendo que modificar en Forge donde dice default por sitiouno
Laravel 5.2 hacia abajo = El valor de Timeout debe estar en 0, de lo contrario el worker no se ejecutará lanzando un FATAL ERRORLaravel 5.3 ó 5.4 = El valor de Timeout pueden ponerlo en 30 o 60
Y por último activen el checkbox Run worker as Daemon (Laravel 4.2+), esto es muy importante dado que si no lo activan forge generara en la configuración de supervisor un
queue:listen
consumiendo demasiada CPU y RAM teniendo que botear el framework Laravel completo cada vez, en cambio al activar la opción Run worker as Daemon (Laravel 4.2+) Forge en la configuración de supervisor usará
queue:worker --daemon
Levantando un proceso PHP liberando CPU y RAM, (sobre todo CPU, créanme es una diferencia notable, se los digo por mala experiencia al no saber xD)
Al utilizar Daemon debemos obligadamente agregar
php artisan queue:restart
a nuestro Deploy Script
pasando de esto :
cd /home/forge/midominio.com git pull origin master composer install --no-interaction --prefer-dist --optimize-autoloader echo "" | sudo -S service php5.6-fpm reload if [ -f artisan ] then php artisan migrate --force fi
a esto:
cd /home/forge/midominio.com git pull origin master composer install --no-interaction --prefer-dist --optimize-autoloader echo "" | sudo -S service php5.6-fpm reload if [ -f artisan ] then php artisan migrate --force php artisan queue:restart fi
Si no agregamos esto y realizamos cambios a nuestro proyecto (código) y subimos los cambios y hacemos un deploy el queue worker que tengamos andando no funcionará por que no recibirá los cambios que hemos realizado, por lo que colocando esa línea forzamos a que cuando hacemos un Deploy se reinicio el queue worker y tome los cambios realizados.
IMPORTANTE: Eso es todo para los Queue’s, sólo asegurarse de NO tener la aplicacion en modo mantenimiento sino, los queue’s no se procesarán.
Por lo general en nuestros proyectos agregamos tareas para que se ejecuten de manera automática, para esto, en Laravel utilizamos Task Scheduling, en donde, dentro de nuestro archivo Kernel.php ubicado en:
app/Console/Kernel.php
vamos a agregar nuestras tareas programadas, como podrían ser:
//Elimina pedidos cada 5 minutos $schedule->command('eliminar:pedidos')->everyFiveMinutes()->withoutOverlapping();
ó por ejemplo
//Envia email cumpleaños diariamente a las 00:01 hrs $schedule->command('email:birthday')->dailyAt('00:01')->withoutOverlapping();
Para que éstas tareas se ejecuten correctamente con Forge de Laravel debemos seleccionar nuestro servidor en nuestra cuenta de Forge y iremos a la opción Scheduler y creamos un nuevo job, en mi caso lo que hago es agregar un job por cada proyecto que tengo (dominio)
php /home/forge/midominio.com/artisan schedule:run
reemplazando claramente donde dice midominio.com por nuestro dominio ya agregado en Forge y en usuario dejamos forge como viene por defecto y en frecuencia seleccionamos Every Minute
Eso es todo ya con ello nuestro cron funcionará correctamente, les aconsejo por cualquier cosa que reiniciar su servidor desde la parte inferior de ésta sección de Forge podemos reiniciarla
Espero que ha alguien le sirva!
Page loaded in 30.45 ms