Introduzione a Laravel Sail

Introduzione a Laravel Sail

Ovvero come usare Docker e i suoi container senza scrivere una riga di codice in docker-compose.yml

In questo post ti spiegherò come installare e come iniziare un nuovo progetto Laravel con Docker e Laravel Sail.

Laravel Sail è un’interfaccia a riga di comando che permette di usare Laravel in versione dockerizzata, ovvero virtualizzata e isolata in più container di Docker, senza doverli creare manualmente.

Utilizzando Laravel Sail, infatti, si ottiene un ambiente di sviluppo locale completamente funzionante senza avere la necessità di installare i vari servizi necessari, come un web server, php, mysql, etc.

Laravel Sail utilizza il file docker-compose.yml e uno comando (sail) che trovi nella directory vendor/bin del tuo progetto. Lo script sail non è altro che una CLI (command-line interface) con comodi metodi per interagire con i container Docker definiti dal file docker-compose.yml.

Prerequisiti

Per iniziare a usare Laravel Sail, come prima cosa devi installare Docker Desktop. Non ti spiego cos’è Docker nel dettaglio perchè per questa guida è superfluo. Ti basti sapere che è un sistema di virtualizzazione in cui tutto il codice necessario a far funzionare un app o servizio è rinchiuso in un “pacchetto” (chiamato container) in modo da renderlo facilmente replicabile fra varie macchine e utilizzabile in maniera affidabile. Un container nell’installazione tipica di Sail, per esempio, è dedicato MySql.

Installazione e configurazione di Laravel Sail

Per creare un nuovo progetto, dopo aver installato e lanciato Docker Desktop, è possibile eseguire il seguente comando dal terminale:

curl -s https://laravel.build/nome-app-sail | bash

Questo installerà una nuova applicazione Laravel nella cartella nome-app-sail. Ovviamente usa il nome che preferisci. Ma cosa fa nella pratica questo comando? Esegue una sequenza di comandi bash… se volete vedere quali, vi basta aprire il link sul browser.

Finita la creazione dei container, vedrai la seguente scritta:

Thank you! We hope you build something incredible. Dive in with: cd nome-app-sail && ./vendor/bin/sail up

Update del 26 febbraio 2021

Al comando di installazione è stato aggiunto il parametro with che permette di decidere i servizi da installare. I servizi disponibili sono: mysql, pgsql, redis, memcached, meilisearch, selenium e mailhog. Ed il comando da usare diventa quindi:

curl -s "https://laravel.build/nome-app-sail?with=mysql,redis" | bash

Il comando Sail

Essendo tutto virtualizzato, non potrai eseguire niente direttamente sul tuo computer senza interfacciarti con il container. Per facilitare il tutto, il buon Taylor, ha creato il comando Sail.

Come dicevo, lo trovi nella cartella vendor/bin ma ti consiglio di crearti un alias per evitare di dover riscrivere tutto il percorso (./vendor/bin/sail) ogni volta.

alias sail='vendor/bin/sail'

Ora, digitando semplicemente sail, possiamo eseguire tutti i comandi.

Una cosa importante da tenere a mente è che prima di avviarlo dovete assicurarvi che nessun altro web server o database sia attivo e funzionante sul vostro computer locale sulle porte di default.

Per avviare tutti i container Docker definiti nel file docker-compose.yml della vostra applicazione, basta digitare il comando up:

sail up

Con questo comando verranno estratte tutte le immagini Docker necessarie e verrà creato un ambiente di sviluppo completo sulla nostra macchina comprensivo di: web server (nginx con php8), db server (mysql8), redis e mailhog.

Se vuoi lanciare Docker in backgroud, puoi usare il flag -d che sta per detached.

sail up -d

Dopo aver istanziato il tuo ambiente di sviluppo, puoi visitare http://localhost su un browser e vedrai la tua nuova installazione di Laravel.

Se vuoi vedere tutti i container Docker che sono stati creati automaticamente grazie a Laraval Sail, puoi usare il comando

docker ps -a

Se vuoi fermare i container in funzione, ti basta premere control + C, o se stai eseguendo i container in background, digita il comando down.

sail down

Grazie a sail puoi anche eseguire comandi PHP, Composer, Artisan e Node/NPM direttamente nel container, senza collegarti via ssh. Per esempio, se vuoi eseguire un comando PHP, ti basta scrivere:

sail php --version

Oppure, se vuoi eseguire i comandi Artisan (di solito scriveresti php artisan migrate) con Laravel Sail devi usare il comando:

sail artisan migrate

Errori comuni

Se il comando sail up non va a buon fine perchè un servizio non può partire, ad esempio mysql, è perchè hai già un servizio sul tuo pc che sta usando la stessa porta. Ad esempio se hai un Mac con Valet, dovrai spegnerlo con il comando

valet stop

e andare a spegnere anche tutti i servizi brew in conflitto.
Per vedere i servizi in esecuzione, esegui

brew services list

e spegni quelli in conflitto con brew services stop, es:

brew services stop mysql

Se anche dopo aver spento Valet, ti risponde picche perchè la porta 80 è già impegnata (Ports are not available: listen tcp 0.0.0.0:80), prova a spegnere Apache con il comando

sudo apachectl stop

o prova a vedere cosa la sta occupando con

lsof -i :80

Conclusione

Perchè un ambiente virtualizzato? Se lavori in team o su versioni legacy di software, saprai già la risposta. Avere un ambiente ermetico e facilmente trasferibili ti permette di lavorare sempre/tutti sulla stessa infrastruttura senza sorprese legate a versioni di php/mysql/nginx diverse. Laravel Sail rende facile e veloce tutta la parte di creazione dell’ambiente Docker lasciandoti concentrare su quello che è il tuo progetto.

Per maggiori dettagli vi rimando alla documentazione ufficiale di Laravel Sail e, se volete, al video introduttivo girato da Taylor Owell, creatore di Laravel.

Ultima modifica: martedì 23 marzo 2021

Cosa ne pensate:

Leonardo

Leonardo 3 mesi fa

Wow, bell'articolo! grazie

Rispondi
Riccardo Slanzi

Riccardo Slanzi 3 mesi fa

Grazie a te Leonardo! Se lo provi, fammi sapere se qualcosa non è chiaro.

Rispondi

Aggiungi il tuo commento

Iscriviti alla mia newsletter

Resterai informato sugli ultimi post, appena verranno pubblicati