Valet

Introduzione

Cerchi un modo ancora più semplice per sviluppare applicazioni Laravel su macOS o Windows? Dai un’occhiata a Laravel Herd. Herd include tutto il necessario per iniziare con lo sviluppo Laravel, incluso Valet, PHP e Composer.

Laravel Valet è un ambiente di sviluppo per i minimalisti di macOS. Laravel Valet configura il tuo Mac per eseguire sempre Nginx in background all’avvio del computer. Poi, utilizzando DnsMasq, Valet fa da proxy per tutte le richieste sul dominio *.test indirizzandole ai siti installati sulla tua macchina locale.

In altre parole, Valet è un ambiente di sviluppo Laravel estremamente veloce che utilizza circa 7 MB di RAM. Valet non sostituisce completamente Sail o Homestead, ma offre un’ottima alternativa se desideri basi flessibili, preferisci una velocità estrema o lavori su una macchina con una quantità limitata di RAM.

Fin da subito, il supporto di Valet include:

Tuttavia, puoi estendere Valet con i tuoi driver personalizzati.

Installazione

Valet richiede macOS e Homebrew. Prima dell’installazione, assicurati che nessun altro programma come Apache o Nginx stia utilizzando la porta 80 della tua macchina locale.

Per iniziare, devi prima assicurarti che Homebrew sia aggiornato utilizzando il comando update:

brew update

Successivamente, dovresti usare Homebrew per installare PHP:

brew install php

Dopo aver installato PHP, sei pronto per installare il Composer package manager. Inoltre, dovresti assicurarti che la directory $HOME/.composer/vendor/bin sia inclusa nel "PATH" del tuo sistema. Dopo aver installato Composer, puoi installare Laravel Valet come pacchetto globale di Composer:

composer global require laravel/valet

Infine, puoi eseguire il comando install di Valet. Questo configurerà e installerà Valet e DnsMasq. Inoltre, i demoni di cui Valet dipende verranno configurati per avviarsi all’avvio del sistema:

valet install

Una volta installato Valet, prova a pingare qualsiasi dominio *.test nel tuo terminale utilizzando un comando come ping foobar.test. Se Valet è installato correttamente, dovresti vedere questo dominio rispondere su 127.0.0.1.

Valet avvierà automaticamente i servizi necessari ogni volta che la tua macchina si avvia.

Versioni PHP

Invece di cambiare la versione PHP globale, puoi dire a Valet di usare versioni PHP diverse per ogni sito tramite il comando isolate command.

Valet ti permette di cambiare versione PHP usando il comando valet use php@version. Se la versione PHP specificata non è già installata, Valet la installerà tramite Homebrew:

valet use php@8.2

valet use php

Puoi anche creare un file .valetrc nella cartella principale del tuo progetto. Il file .valetrc deve contenere la versione PHP che il sito deve usare:

php=php@8.2

Una volta creato questo file, puoi semplicemente eseguire il comando valet use e Valet leggerà il file per determinare la versione PHP preferita del sito.

Valet serve una sola versione PHP alla volta, anche se hai più versioni PHP installate.

Database

Se la tua applicazione ha bisogno di un database, dai un’occhiata a DBngin, uno strumento gratuito e tutto-in-uno per la gestione dei database che include MySQL, PostgreSQL e Redis. Dopo aver installato DBngin, puoi connetterti al tuo database su 127.0.0.1 usando l’username root e una password vuota.

Reimpostare l’installazione

Se hai problemi a far funzionare correttamente la tua installazione di Valet, eseguire il comando composer global require laravel/valet seguito da valet install reimposterà l’installazione e può risolvere diversi problemi. In rari casi, potrebbe essere necessario effettuare un "hard reset" di Valet eseguendo valet uninstall --force seguito da valet install.

Aggiornare Valet

Puoi aggiornare l’installazione di Valet eseguendo il comando composer global require laravel/valet nel tuo terminale. Dopo l’aggiornamento, è una buona pratica eseguire il comando valet install affinché Valet possa apportare ulteriori aggiornamenti ai tuoi file di configurazione, se necessario.

Aggiornamento a Valet 4

Se stai aggiornando da Valet 3 a Valet 4, segui i seguenti passaggi per aggiornare correttamente la tua installazione di Valet:

  • Se hai aggiunto file .valetphprc per personalizzare la versione di PHP del tuo sito, rinomina ogni file .valetphprc in .valetrc. Poi, aggiungi php= all’inizio del contenuto esistente del file .valetrc.
  • Aggiorna eventuali driver personalizzati per adattarli allo spazio dei nomi, alle estensioni, ai type-hints e ai return type-hints del nuovo sistema dei driver. Puoi consultare SampleValetDriver di Valet come esempio.
  • Se usi PHP 7.1 – 7.4 per servire i tuoi siti, assicurati di continuare a utilizzare Homebrew per installare una versione di PHP 8.0 o superiore, poiché Valet utilizzerà questa versione, anche se non è la versione primaria collegata, per eseguire alcuni dei suoi script.

Servire Siti

Una volta che Valet è installato, sei pronto per iniziare a servire le tue applicazioni Laravel. Valet fornisce due comandi per aiutarti a servire le tue applicazioni: park e link.

Il comando park

Il comando park registra una directory sulla tua macchina che contiene le tue applicazioni. Una volta che la directory è stata "parcheggiata" con Valet, tutte le directory al suo interno saranno accessibili nel tuo browser web su http://<nome-directory>.test:

cd ~/Sites

valet park

È tutto qui. Ora, qualsiasi applicazione creata all’interno della tua directory "parcheggiata" sarà automaticamente servita utilizzando la convenzione http://<nome-directory>.test. Quindi, se la tua directory parcheggiata contiene una cartella chiamata "laravel", l’applicazione all’interno di quella cartella sarà accessibile su http://laravel.test. Inoltre, Valet permette automaticamente di accedere al sito utilizzando sottodomini jolly (http://foo.laravel.test).

Il comando link

Il comando link può essere utilizzato anche per servire le tue applicazioni Laravel. Questo comando è utile se vuoi servire un singolo sito in una directory e non l’intera directory:

cd ~/Sites/laravel

valet link

Una volta che un’applicazione è stata collegata a Valet usando il comando link, puoi accedere all’applicazione usando il nome della sua directory. Quindi, il sito collegato nell’esempio sopra può essere raggiunto tramite http://laravel.test. Inoltre, Valet permette automaticamente di accedere al sito usando sottodomini wildcard (http://foo.laravel.test).

Se desideri servire l’applicazione con un hostname diverso, puoi passare l’hostname al comando link. Ad esempio, puoi eseguire il seguente comando per rendere un’applicazione disponibile su http://application.test:

cd ~/Sites/laravel

valet link application

Naturalmente, puoi anche servire applicazioni su sottodomini usando il comando link:

valet link api.application

Puoi eseguire il comando links per visualizzare un elenco di tutte le directory collegate:

valet links

Il comando unlink può essere usato per eliminare il link simbolico per un sito:

cd ~/Sites/laravel

valet unlink

Protezione dei Siti con TLS

Per impostazione predefinita, Valet serve i siti tramite HTTP. Tuttavia, se desideri servire un sito tramite TLS crittografato utilizzando HTTP/2, puoi usare il comando secure. Ad esempio, se il tuo sito è servito da Valet sul dominio laravel.test, dovresti eseguire il seguente comando per proteggerlo:

valet secure laravel

Per "disabilitare la sicurezza" di un sito e tornare a servire il traffico tramite HTTP semplice, usa il comando unsecure. Come il comando secure, questo comando accetta il nome dell’host che desideri disabilitare:

valet unsecure laravel

Servire un Sito Predefinito

A volte potresti voler configurare Valet per servire un sito "predefinito" invece di un 404 quando visiti un dominio test sconosciuto. Per fare ciò, puoi aggiungere un’opzione default al tuo file di configurazione ~/.config/valet/config.json indicando il percorso del sito che deve essere il sito predefinito:

    "default": "/Users/Sally/Sites/example-site",

Versioni PHP per Sito

Per impostazione predefinita, Valet utilizza l’installazione PHP globale per servire i tuoi siti. Tuttavia, se hai bisogno di supportare più versioni di PHP su vari siti, puoi usare il comando isolate per specificare quale versione di PHP un determinato sito deve utilizzare. Il comando isolate configura Valet per usare la versione PHP specificata per il sito che si trova nella tua directory di lavoro corrente:

cd ~/Sites/example-site

valet isolate php@8.0

Se il nome del tuo sito non corrisponde al nome della directory che lo contiene, puoi specificare il nome del sito usando l’opzione --site:

valet isolate php@8.0 --site="site-name"

Per comodità, puoi usare i comandi valet php, composer e which-php per inoltrare le chiamate alla PHP CLI o allo strumento appropriato in base alla versione PHP configurata per il sito:

valet php
valet composer
valet which-php

Puoi eseguire il comando isolated per mostrare un elenco di tutti i tuoi siti isolati e le loro versioni PHP:

valet isolated

Per riportare un sito alla versione PHP globale installata da Valet, puoi eseguire il comando unisolate dalla directory principale del sito:

valet unisolate

Condivisione dei siti

Valet include un comando per condividere i tuoi siti locali con il mondo, offrendo un modo semplice per testare il tuo sito su dispositivi mobili o condividerlo con membri del team e clienti.

Valet supporta nativamente la condivisione dei tuoi siti tramite ngrok o Expose. Prima di condividere un sito, dovresti aggiornare la configurazione di Valet usando il comando share-tool, specificando ngrok o expose:

valet share-tool ngrok

Se scegli uno strumento e non lo hai installato tramite Homebrew (per ngrok) o Composer (per Expose), Valet ti chiederà automaticamente di installarlo. Naturalmente, entrambi gli strumenti richiedono di autenticare il tuo account ngrok o Expose prima di poter iniziare a condividere i siti.

Per condividere un sito, naviga nella directory del sito nel tuo terminale ed esegui il comando share di Valet. Un URL accessibile pubblicamente sarà copiato negli appunti e pronto per essere incollato direttamente nel tuo browser o condiviso con il tuo team:

cd ~/Sites/laravel

valet share

Per interrompere la condivisione del tuo sito, puoi premere Ctrl + C.

Se stai usando un server DNS personalizzato (come 1.1.1.1), la condivisione tramite ngrok potrebbe non funzionare correttamente. Se questo è il caso sul tuo computer, apri le impostazioni di sistema del tuo Mac, vai alle impostazioni di Rete, apri le impostazioni Avanzate, poi vai alla scheda DNS e aggiungi 127.0.0.1 come primo server DNS.

Condivisione dei Siti via Ngrok

Condividere il tuo sito usando ngrok richiede di creare un account ngrok e configurare un token di autenticazione. Una volta ottenuto il token di autenticazione, puoi aggiornare la configurazione di Valet con quel token:

valet set-ngrok-token YOUR_TOKEN_HERE

Puoi passare parametri aggiuntivi di ngrok al comando share, come valet share --region=eu. Per maggiori informazioni, consulta la documentazione ngrok.

Condivisione dei Siti tramite Expose

Condividere il tuo sito usando Expose richiede di creare un account Expose e autenticarti con Expose tramite il tuo token di autenticazione.

Puoi consultare la documentazione di Expose per informazioni sui parametri aggiuntivi della riga di comando supportati.

Condividere siti sulla tua rete locale

Valet limita il traffico in entrata all’interfaccia interna 127.0.0.1 per impostazione predefinita, così la tua macchina di sviluppo non è esposta a rischi di sicurezza da Internet.

Se vuoi permettere ad altri dispositivi nella tua rete locale di accedere ai siti Valet sulla tua macchina tramite l’indirizzo IP della tua macchina (esempio: 192.168.1.10/application.test), dovrai modificare manualmente il file di configurazione Nginx appropriato per quel sito rimuovendo la restrizione sulla direttiva listen. Dovresti rimuovere il prefisso 127.0.0.1: dalla direttiva listen per le porte 80 e 443.

Se non hai eseguito valet secure sul progetto, puoi aprire l’accesso di rete per tutti i siti non HTTPS modificando il file /usr/local/etc/nginx/valet/valet.conf. Tuttavia, se stai servendo il sito del progetto tramite HTTPS (hai eseguito valet secure per il sito), dovresti modificare il file ~/.config/valet/Nginx/app-name.test.

Una volta aggiornato il file di configurazione di Nginx, esegui il comando valet restart per applicare le modifiche.

Variabili d’Ambiente Specifiche per Sito

Alcune applicazioni che utilizzano altri framework possono dipendere da variabili d’ambiente del server ma non offrono un modo per configurarle all’interno del tuo progetto. Valet ti permette di configurare variabili d’ambiente specifiche per sito aggiungendo un file .valet-env.php nella root del tuo progetto. Questo file dovrebbe restituire un array di coppie sito / variabile d’ambiente che verranno aggiunte all’array globale $_SERVER per ogni sito specificato nell’array:

<?php

return [
    // Imposta $_SERVER['key'] a "value" per il sito laravel.test...
    'laravel' => [
        'key' => 'value',
    ],

    // Imposta $_SERVER['key'] a "value" per tutti i siti...
    '*' => [
        'key' => 'value',
    ],
];

Proxying di Servizi

A volte potresti voler instradare un dominio Valet verso un altro servizio sulla tua macchina locale. Ad esempio, potrebbe capitarti di dover eseguire Valet mentre al contempo esegui un sito separato in Docker; tuttavia, Valet e Docker non possono utilizzare entrambe la porta 80 allo stesso tempo.

Per risolvere questo problema, puoi usare il comando proxy per creare un proxy. Ad esempio, puoi instradare tutto il traffico da http://elasticsearch.test a http://127.0.0.1:9200:

# Proxy tramite HTTP...
valet proxy elasticsearch http://127.0.0.1:9200

# Proxy tramite TLS + HTTP/2...
valet proxy elasticsearch http://127.0.0.1:9200 --secure

Puoi rimuovere un proxy usando il comando unproxy:

valet unproxy elasticsearch

Puoi usare il comando proxies per elencare tutte le configurazioni dei siti che sono proxyate:

valet proxies

Driver Personalizzati per Valet

Puoi creare un tuo "driver" Valet per servire applicazioni PHP che utilizzano un framework o CMS non supportato nativamente da Valet. Quando installi Valet, viene creata una directory ~/.config/valet/Drivers che contiene un file SampleValetDriver.php. Questo file contiene un’implementazione di esempio del driver per dimostrare come scrivere un driver personalizzato. Creare un driver richiede solo di implementare tre metodi: serves, isStaticFile e frontControllerPath.

Tutti e tre i metodi ricevono i valori $sitePath, $siteName e $uri come argomenti. Il $sitePath è il percorso completo del sito servito sulla tua macchina, come /Users/Lisa/Sites/my-project. Il $siteName è la parte "host" / "nome del sito" del dominio (my-project). Il $uri è l’URI della richiesta in arrivo (/foo/bar).

Una volta completato il driver personalizzato per Valet, posizionalo nella directory ~/.config/valet/Drivers utilizzando la convenzione di denominazione FrameworkValetDriver.php. Ad esempio, se stai creando un driver Valet personalizzato per WordPress, il nome del tuo file dovrebbe essere WordPressValetDriver.php.

Diamo un’occhiata a un’implementazione di esempio di ciascun metodo che il tuo driver Valet personalizzato deve implementare.

Il metodo serves

Il metodo serves deve restituire true se il tuo driver deve gestire la richiesta in arrivo. Altrimenti, il metodo deve restituire false. Quindi, all’interno di questo metodo, dovresti cercare di determinare se il $sitePath fornito contiene un progetto del tipo che stai cercando di servire.

Ad esempio, immaginiamo di scrivere un WordPressValetDriver. Il nostro metodo serves potrebbe apparire più o meno così:

/**
 * Determine if the driver serves the request.
 */
public function serves(string $sitePath, string $siteName, string $uri): bool
{
    return is_dir($sitePath.'/wp-admin');
}

Il metodo isStaticFile

Il metodo isStaticFile deve determinare se la richiesta in arrivo è per un file "statico", come un’immagine o un foglio di stile. Se il file è statico, il metodo deve restituire il percorso completo del file statico sul disco. Se la richiesta in arrivo non è per un file statico, il metodo deve restituire false:

/**
 * Determine if the incoming request is for a static file.
 *
 * @return string|false
 */
public function isStaticFile(string $sitePath, string $siteName, string $uri)
{
    if (file_exists($staticFilePath = $sitePath.'/public/'.$uri)) {
        return $staticFilePath;
    }

    return false;
}

Il metodo isStaticFile verrà chiamato solo se il metodo serves restituisce true per la richiesta in arrivo e l’URI della richiesta non è /.

Il metodo frontControllerPath

Il metodo frontControllerPath dovrebbe restituire il percorso completamente qualificato al "front controller" della tua applicazione, che di solito è un file "index.php" o equivalente:

/**
 * Ottieni il percorso completamente risolto al front controller dell'applicazione.
 */
public function frontControllerPath(string $sitePath, string $siteName, string $uri): string
{
    return $sitePath.'/public/index.php';
}

Driver Locali

Se desideri definire un driver Valet personalizzato per un’applicazione singola, crea un file LocalValetDriver.php nella directory principale dell’applicazione. Il tuo driver personalizzato può estendere la classe base ValetDriver o un driver specifico esistente come LaravelValetDriver:

use Valet\Drivers\LaravelValetDriver;

class LocalValetDriver extends LaravelValetDriver
{
    /**
     * Determina se il driver gestisce la richiesta.
     */
    public function serves(string $sitePath, string $siteName, string $uri): bool
    {
        return true;
    }

    /**
     * Ottiene il percorso completamente risolto al front controller dell'applicazione.
     */
    public function frontControllerPath(string $sitePath, string $siteName, string $uri): string
    {
        return $sitePath.'/public_html/index.php';
    }
}

Altri comandi di Valet

Command Description
valet list Mostra un elenco di tutti i comandi di Valet.
valet diagnose Genera diagnosi per aiutare nel debug di Valet.
valet directory-listing Determina il comportamento della lista delle directory. Il valore predefinito è "off", che mostra una pagina 404 per le directory.
valet forget Esegui questo comando da una directory "parked" per rimuoverla dalla lista delle directory "parked".
valet log Visualizza un elenco di log scritti dai servizi di Valet.
valet paths Visualizza tutti i tuoi percorsi "parked".
valet restart Riavvia i demoni di Valet.
valet start Avvia i demoni di Valet.
valet stop Ferma i demoni di Valet.
valet trust Aggiunge i file sudoers per Brew e Valet per permettere ai comandi di Valet di essere eseguiti senza richiedere la password.
valet uninstall Disinstalla Valet: mostra le istruzioni per la disinstallazione manuale. Passa l’opzione --force per cancellare aggressivamente tutte le risorse di Valet.

Directory e File di Valet

Potresti trovare utili le seguenti informazioni su directory e file quando risolvi problemi con il tuo ambiente Valet:

~/.config/valet

Contiene tutta la configurazione di Valet. Potresti voler mantenere un backup di questa directory.

~/.config/valet/dnsmasq.d/

Questa directory contiene la configurazione di DNSMasq.

~/.config/valet/Drivers/

Questa directory contiene i driver di Valet. I driver determinano come viene servito un particolare framework / CMS.

~/.config/valet/Nginx/

Questa cartella contiene tutte le configurazioni dei siti Nginx di Valet. Questi file vengono ricostruiti quando si eseguono i comandi install e secure.

~/.config/valet/Sites/

Questa cartella contiene tutti i link simbolici per i tuoi progetti collegati.

~/.config/valet/config.json

Questo file è il file di configurazione principale di Valet.

~/.config/valet/valet.sock

Questo file è il socket PHP-FPM utilizzato dall’installazione Nginx di Valet. Esisterà solo se PHP funziona correttamente.

~/.config/valet/Log/fpm-php.www.log

Questo file è il log degli errori PHP per l’utente.

~/.config/valet/Log/nginx-error.log

Questo file è il log utente per gli errori di Nginx.

/usr/local/var/log/php-fpm.log

Questo file è il registro di sistema per gli errori di PHP-FPM.

/usr/local/var/log/nginx

Questa directory contiene i log di accesso e di errore di Nginx.

/usr/local/etc/php/X.X/conf.d

Questa cartella contiene i file *.ini per diverse configurazioni di PHP.

/usr/local/etc/php/X.X/php-fpm.d/valet-fpm.conf

Questo file contiene la configurazione del pool PHP-FPM.

~/.composer/vendor/laravel/valet/cli/stubs/secure.valet.conf

Questo file è la configurazione predefinita di Nginx usata per creare certificati SSL per i tuoi siti.

Accesso al Disco

Da macOS 10.14, l’accesso ad alcuni file e directory è limitato per impostazione predefinita. Queste restrizioni includono le cartelle Scrivania, Documenti e Download. Inoltre, l’accesso a volumi di rete e rimovibili è limitato. Pertanto, Valet consiglia di posizionare le cartelle del tuo sito al di fuori di queste posizioni protette.

Tuttavia, se desideri servire siti da una di queste posizioni, dovrai concedere a Nginx l’"Accesso Completo al Disco". Altrimenti, potresti incontrare errori del server o altri comportamenti imprevedibili da parte di Nginx, soprattutto durante la gestione di asset statici. Di solito, macOS ti chiederà automaticamente di concedere a Nginx l’accesso completo a queste posizioni. In alternativa, puoi farlo manualmente tramite System Preferences > Security & Privacy > Privacy e selezionando Full Disk Access. Successivamente, abilita tutte le voci nginx nel pannello principale della finestra.

Lascia un commento

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *