Introduzione a Laravel Sail
Se sei un principiante nello sviluppo web con PHP e Laravel, potresti esserti imbattuto in un problema comune: la configurazione dell'ambiente di sviluppo. Installare PHP, Composer, un server web come Nginx o Apache, e un database come MySQL direttamente sul proprio sistema operativo (il cosiddetto "bare metal") può essere frustrante. Spesso ci si ritrova con versioni diverse tra i vari membri del team o con conflitti tra software installati per progetti differenti.
Laravel Sail nasce per risolvere esattamente questo problema. Sail è un'interfaccia a riga di comando (CLI) leggera che fornisce un'astrazione semplice per l'interazione con Docker. In termini semplici, Sail permette di avviare un ambiente di sviluppo completo, preconfigurato e isolato, senza che tu debba scrivere manualmente complessi file di configurazione Docker o conoscere a fondo ogni comando di Docker.
Perché usare Sail? Perché Docker permette di "impacchettare" l'applicazione e tutte le sue dipendenze in contenitori. Questo significa che l'ambiente in cui scrivi il codice è identico a quello dei tuoi colleghi e, potenzialmente, molto simile a quello di produzione. Non sentirai più la frase "ma sul mio computer funziona!".
Comprendere i concetti base: Docker e i Contenitori
Prima di tuffarci in Sail, è fondamentale capire cosa succede "sotto il cofano". Docker non è una macchina virtuale (VM). Mentre una VM emula l'intero hardware e carica un intero sistema operativo guest, Docker condivide il kernel del sistema operativo dell'host, isolando solo i processi dell'applicazione.
Perché Docker è fondamentale per Laravel?
Un progetto Laravel moderno non ha bisogno solo di PHP. Ha bisogno di:
- PHP: Il linguaggio di programmazione.
- MySQL/PostgreSQL: Per l'archiviazione dei dati.
- Redis: Per la gestione della cache e delle code.
- Mailpit: Per testare l'invio di email localmente.
- Meilisearch: Per ricerche full-text avanzate.
Configurare tutti questi servizi manualmente richiederebbe ore. Sail automatizza questo processo creando un file chiamato docker-compose.yml, che istruisce Docker su quali "immagini" scaricare e come collegarle tra loro in una rete virtuale.
Installazione e Configurazione Iniziale
Per utilizzare Laravel Sail, devi avere installato Docker Desktop (su Windows, macOS o Linux). Se sei su Windows, è caldamente consigliato l'utilizzo di WSL2 (Windows Subsystem for Linux), poiché Docker e Laravel girano in modo nativamente più efficiente su un kernel Linux.
Creare un nuovo progetto con Sail
Il modo più semplice per iniziare è utilizzare il comando di installazione ufficiale fornito da Laravel. Non hai nemmeno bisogno di avere PHP o Composer installati localmente sulla tua macchina, poiché Laravel utilizzerà un contenitore temporaneo per eseguire l'installazione.
Ecco il comando da eseguire nel tuo terminale (Bash o PowerShell):
curl -s "https://laravel.build/mio-progetto" | bash
Spiegazione del comando:
curl: Scarica lo script di installazione dal server di Laravel.https://laravel.build/mio-progetto: Specifica il nome della cartella in cui verrà creato il progetto.| bash: Passa lo script scaricato direttamente all'interprete Bash per l'esecuzione.
Una volta completato il processo, entrerai nella cartella del progetto e avvierai l'ambiente con il seguente comando:
cd mio-progetto
./vendor/bin/sail up -d
Il flag -d (detached mode) avvia i contenitori in background, permettendoti di continuare a usare il terminale.
Gestire l'ambiente con i comandi Sail
Ora che l'ambiente è attivo, non userai più i comandi globali (come php artisan o composer install) direttamente sul tuo PC. Perché? Perché PHP non è installato sul tuo PC, ma dentro il contenitore Docker. Sail funge da ponte.
I comandi più comuni
Invece di scrivere php artisan migrate, scriverai sail artisan migrate. Sail instrude Docker a eseguire quel comando all'interno del contenitore PHP.
Ecco una tabella di conversione rapida:
- Artisan:
php artisan ...$ ightarrow$./vendor/bin/sail artisan ... - Composer:
composer install$ ightarrow$./vendor/bin/sail composer install - Node/NPM:
npm run dev$ ightarrow$./vendor/bin/sail npm run dev - Test:
php vendor/bin/phpunit$ ightarrow$./vendor/bin/sail test
Creare un alias per comodità
Scrivere ogni volta ./vendor/bin/sail è noioso. La maggior parte degli sviluppatori crea un "alias" nel proprio file di configurazione della shell (.zshrc o .bashrc):
alias sail='[ -f sail ] && bash sail || bash vendor/bin/sail'
Dopo aver aggiunto questa riga e riavviato il terminale, potrai semplicemente digitare sail up o sail artisan migrate.
Personalizzare i servizi in docker-compose.yml
Uno dei punti di forza di Sail è la flessibilità. Se il tuo progetto non ha bisogno di Redis ma preferisce PostgreSQL invece di MySQL, puoi modificare la configurazione.
Il file docker-compose.yml definisce l'architettura del tuo ambiente. Ecco un esempio semplificato di come appare una sezione di questo file:
services:
laravel.test:
build:
context: ./vendor/laravel/sail/runtimes/8.2
dockerfile: Dockerfile
ports:
- "80:80"
environment:
WWWUSER: '${WWWUSER}'
COMPOSE_PROJECT_NAME: '${COMPOSE_PROJECT_NAME}'
volumes:
- '.:/var/www/html'
networks:
- sail
mysql:
image: 'mysql/mysql-server:8.0'
ports:
- '3306:3306'
environment:
MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
networks:
- sail
Analisi del codice:
laravel.test: È il contenitore principale dove gira il tuo codice PHP. Il volume.:/var/www/htmlsincronizza la cartella del tuo PC con quella del contenitore: ogni modifica al file che fai nell'editor (VS Code) è istantaneamente visibile nel browser.mysql: È un contenitore separato che gira il database. Comunica con il contenitore Laravel tramite la rete definita innetworks.ports: Mappano la porta del contenitore alla porta del tuo PC. Ad esempio,80:80significa che visitandohttp://localhostnel browser, verrai indirizzato al server web interno al contenitore.
Esempi Pratici e Casi d'Uso Reali
Caso 1: Aggiungere un nuovo servizio (es. MongoDB)
Immagina di dover integrare MongoDB nel tuo progetto Laravel. Invece di installarlo localmente, puoi aggiungere un blocco di codice al tuo docker-compose.yml sotto la sezione services:
mongodb:
image: 'mongo:latest'
ports:
- '27017:27017'
networks:
- sail
Dopo aver salvato il file, esegui sail down e sail up -d per ricostruire l'ambiente. Ora hai un database MongoDB pronto all'uso, isolato e configurato.
Caso 2: Collaborazione in Team
Quando un nuovo sviluppatore si unisce al progetto, non deve più seguire un manuale di 10 pagine su come installare PHP, estensioni, MySQL e Redis. Gli basterà:
- Clonare il repository Git.
- Eseguire
composer install(tramite un contenitore temporaneo). - Eseguire
sail up -d.
L'ambiente sarà identico a quello di chiunque altro nel team, eliminando i bug legati alle differenze di versione del software.
Errori Comuni e FAQ
1. "Port 80 is already in use"
Questo è l'errore più comune. Accade quando hai già un server web (come XAMPP o Apache) installato e attivo sul tuo PC.
Soluzione: Apri il file .env e cambia la porta di Laravel:
APP_PORT=8080
Ora l'app sarà raggiungibile su http://localhost:8080.
2. Problemi di permessi su Linux/macOS
A volte i file creati da Sail (che gira come utente root nel contenitore) appartengono a root e non all'utente locale.
Soluzione: Sail gestisce questo tramite la variabile WWWUSER. Assicurati che Docker Desktop sia correttamente configurato per mappare l'utente corrente.
3. Sail è lento su Windows
Se noti che il caricamento delle pagine è lento, è probabile che tu stia aprendo il progetto in una cartella di Windows (es. C:\\Users\\Nome\\Progetti).
Soluzione: Sposta il progetto all'interno del file system di WSL2 (es. \\wsl$\\Ubuntu\\home\\utente\\progetti). La differenza di performance è drastica.
Prossimi Passi
Ora che hai familiarità con Laravel Sail, sei pronto per esplorare concetti più avanzati di DevOps e sviluppo web. Ecco alcuni suggerimenti per approfondire:
- Ottimizzazione delle Immagini: Impara a creare i tuoi
Dockerfilepersonalizzati se hai bisogno di installare estensioni PHP specifiche non incluse nel runtime di Sail. - CI/CD: Scopri come usare GitHub Actions per eseguire i test di Laravel in un ambiente Docker simile a quello di Sail prima di fare il deploy in produzione.
- Laravel Forge: Quando sarai pronto per pubblicare il tuo sito online, esplora Laravel Forge, che semplifica enormemente la gestione dei server VPS.
- Studio di Database: Prova a collegare un client esterno come TablePlus o DBeaver al database di Sail utilizzando la porta
3306definita neldocker-compose.yml.
Utilizzare Sail non è solo un modo per installare Laravel, ma è il primo passo verso una mentalità professionale di sviluppo "containerizzata", che ti renderà uno sviluppatore più versatile e preparato alle esigenze delle aziende moderne.