Introducción
En este tutorial construirás una aplicación Laravel con comandos artisan personalizados usandorevolution/laravel-console-starter.
Ventajas de usar este starter kit:
- Configuración rápida: puedes empezar a desarrollar aplicaciones de consola de inmediato, sin configuraciones complejas.
- Ecosistema Laravel: puedes utilizar la programación de tareas, la base de datos, las notificaciones y todas las funcionalidades de Laravel.
- Comandos Artisan: crea y gestiona fácilmente comandos personalizados con el potente sistema Artisan de Laravel.
- Facilidad para testear: puedes escribir tests para tus comandos con el framework de testing de Laravel.
Requisitos previos
Instala el siguiente software.- PHP
^8.3 - Composer (https://getcomposer.org/)
- Laravel Installer (
composer global require laravel/installer)
Configuración del proyecto
Crea un nuevo proyecto
my-app con la estructura básica de una aplicación de consola.Durante la instalación se ejecutan automáticamente:- Generación del archivo
.enva partir de.env.example - Configuración de la clave de la aplicación con
php artisan key:generate
Verifica la configuración de entorno
MAIL_MAILER=log).Si necesitas enviar correos reales, configura un servicio como Mailgun, Postmark o SES en el archivo .env.Crear comandos de consola
Genera el comando
make:command.YourCommandName: nombre de la clase del comando (por ejemplo,SendDailyReport).your:command: nombre de invocación del comando (por ejemplo,report:send-daily).
app/Console/Commands/YourCommandName.php.Implementa el comando
$signature defines el nombre de invocación y en el método handle() escribes la lógica.Ejecuta el comando
storage/logs/laravel.log y en la consola.Programación de tareas con GitHub Actions
Con GitHub Actions puedes ejecutar comandos de forma periódica sin necesidad de cron en el servidor.Revisa el archivo de workflow
.github/workflows/cron.yml.Cambia el comando
php artisan inspire por tu propio comando.Ajusta la programación
cron para configurar la frecuencia de ejecución.Gestiona la información sensible con secrets
Funcionalidad de notificaciones
Puedes notificar el resultado o los errores de un comando por correo, Slack, etc.Crea la clase de notificación
app/Notifications/TaskCompleted.php.Configura el canal de notificación
Envía la notificación desde el comando
Ejemplos prácticos de aplicación
Ejemplo 1: Monitorización de sitios web con alertas en Slack
Comando que comprueba si un sitio web está online y envía una alerta a Slack si se detecta un problema.Instala el canal de notificación de Slack
Crea el comando y la notificación
Configura Slack
.env.config/services.php.Implementa la notificación
app/Notifications/WebsiteDown.php.Implementa el comando
app/Console/Commands/MonitorWebsites.php.Programa con GitHub Actions
.github/workflows/cron.yml.Ejemplo 2: Actualización de cartera de criptomonedas con notificación en Discord
Comando que obtiene los precios de criptomonedas desde la API de CoinGecko y envía la actualización mediante un webhook de Discord.Instala el canal de notificación de Discord
Crea el comando y la notificación
Configura Discord
.env.config/services.php.Implementa el comando y ejecútalo
Ejemplo 3: Scraping de contenido web y notificación por correo
Comando que hace scraping de contenido de un sitio web y envía el resultado por correo.Crea el comando y la notificación
Configura el correo
.env.Implementa el comando y ejecútalo
Próximos pasos
Ya has aprendido los fundamentos para desarrollar aplicaciones de consola con Laravel usandorevolution/laravel-console-starter.
Para profundizar más:
- Explora la documentación de Laravel: revisa las funcionalidades que pueden potenciar tu app de consola en la documentación oficial de Laravel.
- Implementa pruebas: crea tests para tus comandos con el framework de testing de Laravel para asegurar su fiabilidad.
- Considera crear paquetes: si vas a reutilizar los mismos comandos en varios proyectos, considera publicarlos como paquetes reutilizables de Laravel.
- Mantente al día: sigue Laravel News y el blog oficial para conocer las buenas prácticas más recientes.