Laravel 10 Sail: La nueva forma de desarrollar aplicaciones web con Laravel
En el mundo del desarrollo web, la eficiencia y la simplicidad son esenciales. Es por eso que Laravel 10 Sail se ha convertido en una herramienta imprescindible para los desarrolladores de Laravel. En este artículo, exploraremos en detalle esta nueva adición al ecosistema de Laravel y cómo puede mejorar tu experiencia de desarrollo web. Desde su instalación hasta sus características clave y comparación con Docker, aquí tienes todo lo que necesitas saber sobre Laravel 10 Sail.
Índice
Introducción a Laravel 10 Sail
Laravel es el framework PHP más popular y usado actualmente para crear todo tipo de aplicaciones web, desde sencillas webs de contenido a complejas aplicaciones empresariales. Su curva de aprendizaje es muy corta y permite construir sites robustos y escalables de forma muy rápida.
Sin embargo, configurar el entorno de desarrollo para trabajar con Laravel no siempre es trivial. Requiere instalar un servidor web local, gestionar bases de datos, configurar PHP, etc.
Es aquí donde entra en acción Laravel Sail, una de las novedades más interesantes introducidas en Laravel 8 que podemos usar en versiones posteriores a esta. Laravel Sail nos proporciona un entorno de desarrollo local basado en Docker, totalmente configurado y optimizado para trabajar con Laravel de forma sencilla.
A lo largo de este artículo veremos en profundidad qué es y cómo funciona Laravel Sail, analizaremos sus ventajas frente a otras alternativas como Docker directamente o Vagrant, aprenderemos a instalarlo y configurarlo, y veremos cómo podemos sacarle el máximo partido para nuestros proyectos de desarrollo web con Laravel.
¿Qué es Laravel Sail?
Laravel Sail es un entorno de desarrollo basado en Docker, preconfigurado y listo para usar, que nos permite crear aplicaciones Laravel de forma local sin necesidad de instalar software adicional en nuestra máquina.
Sail utiliza Docker para gestionar su propia pila LAMP (Linux, Apache, MySQL y PHP) en contenedores aislados. De esta forma podemos trabajar con diferentes versiones de PHP, bases de datos y otros servicios, sin que entren en conflicto con otros programas que tengamos instalados en el sistema operativo host.
Algunas de las características más interesantes de Laravel Sail son:
- Entorno local totalmente contenido en Docker: no hace falta instalar PHP, MySQL, Redis u otros programas directamente en el sistema operativo anfitrión. Todo se ejecuta aislado en contenedores Docker.
- Optimizado para Laravel: incluye PHP 8.1, MySQL, Redis, Mailhog, etc preconfigurados para trabajar juntos sin problemas.
- Fácil de usar: se lanza con un simple comando
sail up
. No hace falta conocer Docker.- Rápido: los contenedores están precompilados para ofrecer un arranque muy rápido.
- Versátil: permite configurar diferentes versiones de PHP, bases de datos MySQL u otros servicios según el proyecto.
- Liviano: ocupa muy poco espacio en disco y consume pocos recursos del sistema.
En resumen, Laravel Sail nos permite disponer de un entorno de desarrollo local para proyectos Laravel de forma aislada, sin tener que instalar y configurar manualmente las diferentes piezas. Esto mejora enormemente la experiencia de desarrollo, especialmente en equipos.
Ventajas de Laravel Sail frente a alternativas
Tradicionalmente, configurar un entorno de desarrollo para proyectos PHP requería instalar diferentes softwares en nuestra máquina: PHP, MySQL, Nginx/Apache, Redis, etc. Esto presenta algunos inconvenientes:
- Requiere privilegios de administrador para instalar y configurar los programas.
- Pueden existir conflictos entre versiones y configuraciones.
- Dificulta el trabajo en equipo al no compartir el mismo entorno.
- Provoca "contaminación" de dependencias y configuraciones en el sistema operativo.
Laravel Sail resuelve estos problemas ejecutando cada pieza en un contenedor Docker separado y aislado:
- No hace falta instalar software adicional en el sistema operativo principal.
- Los contenedores Docker garantizan entornos idénticos y preconfigurados.
- Se eliminan conflictos de versiones y dependencias.
- El equipo de desarrollo trabaja sobre el mismo entorno reproducible.
Otras alternativas populares para el desarrollo local con PHP son las máquinas virtuales (por ejemplo con Vagrant) o el uso directo de Docker sin Laravel Sail.
Comparado con Vagrant, Laravel Sail es mucho más rápido de arrancar y ocupa menos recursos al estar basado en contenedores Docker en lugar de máquinas virtuales completas. Y frente al uso puro de Docker, Laravel Sail proporciona una capa de abstracción y facilidad de uso que nos permite centrarnos en el código de nuestra aplicación web.
En resumen, Laravel Sail destaca por su velocidad, bajo consumo de recursos, facilidad de uso y enfoque específico en entornos de desarrollo para aplicaciones Laravel, lo que lo convierte en una excelente opción frente a otros enfoques.
Novedades en Laravel Sail 1.0
La primera versión estable de Laravel Sail se liberó en marzo de 2021 coincidiendo con el lanzamiento de Laravel 8. Esta release incluye varias mejoras y cambios significativos respecto a las versiones preliminares.
Algunos de los cambios y novedades más destacables son:
- Soporte nativo para Windows y Mac: anteriormente Laravel Sail solo funcionaba nativamente en Linux y requería trabajo adicional en Mac y Windows. Ahora se admite transparentemente en estos sistemas.
- Uso de Docker Compose: en lugar de definir los contenedores directamente en Docker, ahora Sail usa ficheros Docker Compose para una gestión más sencilla.
- Compatibilidad con Laravel 10: obviamente Laravel Sail 1.0 es totalmente compatible con la nueva versión del framework.
- PhpMyAdmin incluido: se incorpora PhpMyAdmin para gestionar fácilmente las bases de datos MySQL.
- Redis habilitado por defecto: el caché y broker de colas Redis ahora viene activado por defecto.
- Compatible con Laravel Horizon: el sistema de colas Horizon funciona directamente con Laravel Sail.
- Rendimiento mejorado: se han refinado los contenedores Docker base para ofrecer un arranque más rápido.
En resumen, Laravel Sail 1.0 trae consigo un importante salto cualitativo, con cambios orientados a mejorar la compatibilidad entre plataformas, facilidad de uso y rendimiento.
Instalación y configuración de Laravel Sail
Procedamos ahora a ver los pasos necesarios para instalar y configurar Laravel Sail en nuestro sistema. Los requisitos previos son minimalistas:
- Docker Desktop instalado (v2.0 o superior)
- Docker Compose instalado
- Git instalado
- Composer instalado
Instalando Laravel Sail
Para instalar Laravel Sail, lo primero es posicionarnos en la carpeta de nuestro proyecto Laravel usando la terminal.
Una vez allí, instalamos Laravel Sail ejecutando el siguiente comando Composer:
composer require laravel/sail --dev
Esto añadirá Laravel Sail y sus dependencias al proyecto.
El siguiente paso es crear el archivo docker-compose.yml
con la configuración de los contenedores Docker que usará nuestra aplicación. Para ello ejecutamos:
php artisan sail:install
Con esto tendremos Laravel Sail instalado y listo para utilizarse.
Archivos importantes
Los directorios y archivos más importantes que genera la instalación de Laravel Sail son:
- docker-compose.yml: contiene la configuración de los servicios Docker que utilizará nuestra aplicación Laravel.
- docker/: directorio que contiene las imágenes Docker base que utilizan los contenedores.
- sail: script Bash para interactuar fácilmente con Laravel Sail desde la terminal.
Opcionalmente, podemos crear un archivo .env
con variables de entorno que serán cargadas automáticamente por Laravel Sail.
Configuración adicional
Opcionalmente, podemos personalizar la configuración de Laravel Sail modificando el archivo docker-compose.yml
.
Por ejemplo, para añadir MongoDB podemos agregar el siguiente servicio (en nuestro caso usaremos el docker-compose.yaml que nos ha generado, esto solo es una prueba de que podemos modificarlo a nuestro gusto y necesidad):
codemongodb:
image: 'mongo:4.2'
ports:
- '27017:27017'
volumes:
- 'sail-mongodb:/data/db'
volumes:
sail-mongodb:
driver: local
Del mismo modo podemos cambiar las versiones de PHP, MySQL u otros servicios según necesitemos.
¡Eso es todo lo necesario para tener listo nuestro entorno de desarrollo con Laravel Sail! A continuación veremos cómo podemos utilizarlo para crear aplicaciones PHP de forma ágil y sencilla.
Uso de Laravel Sail en el desarrollo de aplicaciones web
Una vez que tenemos Laravel Sail instalado correctamente, explotar sus ventajas para crear aplicaciones web con Laravel es muy sencillo. Es importante que tengamos docker corriendo si no no funcionará el levantamiento del contenedor
Iniciar el entorno de desarrollo
Desde la carpeta raíz de nuestro proyecto, podemos levantar el entorno de desarrollo Sail con un simple comando:
./vendor/bin/sail up
Esto iniciará todos los contenedores Docker definidos (PHP, MySQL, Redis, etc.) creando una pila LAMP completamente funcional.
Si queremos ejecutar los contenedores en segundo plano podemos usar la opción -d
:
./vendor/bin/sail up -d
¡Y listo! Con esto podemos empezar a desarrollar nuestra aplicación Laravel accediendo a http://localhost
.
Ejecutar comandos de Artisan
Podemos ejecutar los comandos de Artisan de Laravel dentro del contenedor de PHP con la opción sail artisan
:
./vendor/bin/sail artisan migrate
De este modo tendremos acceso completo a las poderosas funcionalidades de Artisan para gestionar nuestra app.
Acceder a la base de datos
También podemos conectarnos a MySQL desde la terminal con:
./vendor/bin/sail mysql
Si queremos ver las tablas en nuestro editor favorito como puede ser MySQL Workbench simplemente creamos una conexión ponemos el Hostname 127.0.0.1 y el puerto que hemos usado en el docker-compose que sería el 3306. Las credenciales serán las que tenemos en el env DB_USERNAME y DB_PASSWORD
Depurar y solventar problemas
Si necesitamos inspeccionar logs, ejecutar comandos dentro de un contenedor específico o depurar problemas, Sail proporciona varios comandos útiles:
# Ver logs
./vendor/bin/sail logs
# Ejecutar comando en el contenedor de PHP
./vendor/bin/sail php {command}
# Conectarse al contenedor de MySQL
./vendor/bin/sail mysql
# Acceder al contenedor de Redis
./vendor/bin/sail redis
Esto, unido a las funcionalidades de depuración de Docker y Docker Compose, nos permite tener un control total sobre nuestro entorno de desarrollo.
Como vemos, Laravel Sail hace que tareas habituales como migrar la base de datos, ejecutar Artisan o depurar problemas de configuración sean muy sencillas.
Por último podemos acceder ya a nuestra aplicación abriendo nuestro navegador web y escribiendo la url de nuestro contenedor, en mi caso http://localhost:81
o http://0.0.0.0:81
en mi caso uso el puerto 81 pero lo más normal es que tengas el puerto 80 libre
Laravel Sail vs Docker: ¿cuándo utilizar cada opción?
Hemos visto que Laravel Sail proporciona un entorno de desarrollo basado en Docker, optimizado para aplicaciones Laravel. Esto nos permite trabajar de forma aislada sin instalar software adicional en el sistema operativo.
Sin embargo, Docker también puede utilizarse directamente sin Laravel Sail. ¿Cuándo conviene usar Laravel Sail y cuándo es mejor recurrir directamente a Docker?
Algunas recomendaciones útiles:
- Laravel Sail es ideal para proyectos donde lo importante es desarrollar rápidamente aplicaciones Laravel. Nos abstrae de los detalles de Docker.
- Docker puro puede resultar mejor para proyectos más complejos que requieran una configuración muy personalizada. Requiere más conocimientos de Docker y DevOps.
- Sail está pensado para entornos de desarrollo. Docker permite también desplegar aplicaciones en producción.
- Laravel Sail hace más sencilla la colaboración en equipo. Docker puro requiere más habilidades técnicas.
- Si vamos a utilizar Docker de todas formas, usar Laravel Sail directamente nos ahorrará trabajo en la configuración inicial.
En resumen, Laravel Sail destaca por su simplicidad y orientación a la productividad en el desarrollo de aplicaciones web sobre Laravel. Docker por su parte es más flexible pero requiere conocimientos más profundos de DevOps.
Lo ideal es aprovechar las ventajas de ambos: Laravel Sail para crear la aplicación de forma ágil, y Docker para preparar el despliegue a producción. ¡Sacaremos lo mejor de los dos mundos!
Características destacadas de Laravel Sail
Hemos visto que Laravel Sail resuelve de forma elegante el problema de configurar un entorno de desarrollo local para proyectos PHP. Ahora profundicemos en algunas de sus características más destacadas.
Simplicidad en el desarrollo sobre Laravel
Sin duda la mayor ventaja de Laravel Sail es la enorme simplificación que introduce en el flujo de desarrollo sobre Laravel.
Con un simple comando podemos levantar una pila LAMP completamente funcional y preparada para ejecutar aplicaciones Laravel. No hace falta instalar ni configurar PHP, bases de datos, servidores web u otros programas por separado.
Además, la integración con comandos de Artisan y funcionalidades propias de Laravel es totalmente transparente. Trabajamos como si los servicios estuvieran instalados directamente en local, pero aprovechando todas las ventajas del aislamiento y reproducibilidad de los contenedores Docker.
Esto se traduce en un incremento masivo de la productividad de los desarrolladores y equipos, que pueden centrarse en construir la aplicación web en lugar de lidiar con problemas de configuración de entornos.
Reproducibilidad entre entornos
Otro gran beneficio es que Laravel Sail permite contar con entornos idénticos y reproducibles entre los diferentes miembros del equipo.
Esto resuelve el conocido problema de "pero en mi máquina funciona", gracias al aislamiento e inmutabilidad de los contenedores Docker que utiliza Laravel Sail.
Da igual que un programador use Linux, Mac o Windows: todos dispondrán exactamente del mismo stack de software para desarrollar.
Esto reduce enormemente bugs difícilmente reproducibles y problemas al integrar código de distintos desarrolladores.
Versatilidad y personalización
Aunque Laravel Sail viene preconfigurado para satisfacer la mayoría de necesidades en proyectos sobre Laravel, disponemos de total flexibilidad para personalizarlo según requiramos.
Modificando el archivo docker-compose.yml
podemos alterar versiones de PHP y MySQL, añadir otras bases de datos como PostgreSQL o MongoDB, incluir servicios adicionales como ElasticSearch, etc.
Incluso permite configurar diferentes entornos Sail que coexistan en el mismo proyecto, para separar por ejemplo development y testing.
Esta versatilidad hace que Laravel Sail se adapte perfectamente tanto a proyectos sencillos como a aplicaciones web enterprise más exigentes.
Rendimiento y ligereza
Comparado con alternativas como máquinas virtuales completas, Laravel Sail se caracteriza por un excelente rendimiento y consumo mínimo de recursos.
Los contenedores Docker están optimizados para arrancar muy rápidamente. Y gracias al uso de imágenes Docker alpine como base, la huella del sistema es muy reducida.
Esto permite que Laravel Sail funcione fluidamente incluso en equipos con hardware modesto. Tu portátil agradecerá trabajar con contenedores Docker en lugar de pesadas VM!
Fácil adopción
Para aprovechar Laravel Sail no es necesario ser un experto en Docker ni en administración de sistemas. Su interfaz y abstracciones están pensadas para que cualquier desarrollador web pueda ser productivo rápidamente.
De hecho, muchos programadores ni siquiera necesitan ser conscientes de que están utilizando Docker en background. Simplemente levantan su entorno Laravel con sail up
y se ponen a construir su aplicación.
Esta facilidad de adopción es clave para que Laravel Sail se integre con éxito en trabajos de desarrollo de todo tipo y tamaño.
Conclusión
A lo largo de este artículo hemos visto en profundidad qué es Laravel Sail, cómo funciona y los beneficios que aporta para crear aplicaciones PHP sobre el excelente framework Laravel.
Podemos resumir las ventajas que Laravel Sail brinda para el desarrollo web:
- Fácil configuración de entornos de desarrollo reproducibles
- Mayor productividad al eliminar problemas de dependencias.
- Entornos idénticos para todo el equipo de programadores.
- Integración perfecta con el ecosistema Laravel.
- Rendimiento muy superior a las máquinas virtuales.
- Permite escalar fácilmente los proyectos cuando sea necesario.
Si aún no has probado Laravel Sail te animo a que le des una oportunidad en tus próximos proyectos. ¡Puede marcar un antes y un después en tu flujo de desarrollo!
Y esto es todo, espero que este artículo te haya resultado útil para conocer Laravel Sail. No olvides compartir cualquier duda o sugerencia adicional en los comentarios. ¡Hasta la próxima!
Preguntas Frecuentes
Sí, Laravel Sail es compatible con Windows 10 usando Docker Desktop y WSL2. Se recomienda Windows 10 Pro o Education.
No, una de las grandes ventajas es que abstrae la complejidad de Docker, por lo que no hace falta ser un experto para trabajar con Laravel Sail.
Puedes usar PhpMyAdmin en http://localhost:8081 o conectarte por línea de comandos con ./vendor/bin/sail mysql.
No, Laravel Sail está pensado exclusivamente para entornos de desarrollo local. Para producción es mejor usar Docker directamente y optimizar la configuración.