Distribuzione (Deployment)
Introduzione
Quando sei pronto per distribuire la tua applicazione Laravel in produzione, ci sono alcune cose importanti che puoi fare per assicurarti che l’applicazione funzioni in modo efficiente. In questo documento, affronteremo alcuni ottimi punti di partenza per assicurarti che la tua applicazione Laravel venga distribuita correttamente.
Requisiti server
Il framework Laravel ha alcuni requisiti di sistema. Assicurati che il tuo server web abbia la seguente versione minima di PHP e le estensioni necessarie:
- PHP >= 8.1
- Ctype PHP Extension
- cURL PHP Extension
- DOM PHP Extension
- Fileinfo PHP Extension
- Filter PHP Extension
- Hash PHP Extension
- Mbstring PHP Extension
- OpenSSL PHP Extension
- PCRE PHP Extension
- PDO PHP Extension
- Session PHP Extension
- Tokenizer PHP Extension
- XML PHP Extension
Configurazione del server
Nginx
Se stai distribuendo la tua applicazione su un server che utilizza Nginx, puoi utilizzare il seguente file di configurazione come punto di partenza per configurare il tuo server web. È probabile che tu debba personalizzare questo file in base alla configurazione del tuo server. Se hai bisogno di assistenza nella gestione del tuo server, considera l’utilizzo di un servizio di gestione e distribuzione del server di Laravel di prima parte, come Laravel Forge.
Assicurati, come indicato nella configurazione di seguito, che il tuo server web indirizzi tutte le richieste al file public/index.php della tua applicazione. Non devi mai spostare il file index.php nella radice del tuo progetto, poiché servire l’applicazione dalla radice del progetto esporrà molti file di configurazione sensibili su Internet:
server { listen 80; listen [::]:80; server_name example.com; root /srv/example.com/public; add_header X-Frame-Options "SAMEORIGIN"; add_header X-Content-Type-Options "nosniff"; index index.php; charset utf-8; location / { try_files $uri $uri/ /index.php?$query_string; } location = /favicon.ico { access_log off; log_not_found off; } location = /robots.txt { access_log off; log_not_found off; } error_page 404 /index.php; location ~ \.php$ { fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; include fastcgi_params; } location ~ /\.(?!well-known).* { deny all; } }
Ottimizzazione
Ottimizzazione dell’autoloader
Quando effettui il deploy in produzione, assicurati di ottimizzare la mappa degli autoloader delle classi di Composer in modo che Composer possa trovare rapidamente il file corretto da caricare per una determinata classe:
composer install --optimize-autoloader --no-dev
Oltre all’ottimizzazione dell’autoloader, assicurati sempre di includere un file composer.lock nel repository di controllo del codice sorgente del tuo progetto. Le dipendenze del tuo progetto possono essere installate molto più velocemente quando è presente un file composer.lock.
Configurazione della Cache
Quando distribuisci la tua applicazione in produzione, assicurati di eseguire il comando Artisan config:cache durante il processo di distribuzione:
php artisan config:cache
Questo comando combinerà tutti i file di configurazione di Laravel in un singolo file memorizzato nella cache, riducendo notevolmente il numero di accessi al filesystem che il framework deve fare durante il caricamento dei valori di configurazione.
Se esegui il comando config:cache durante il processo di distribuzione, assicurati di chiamare la funzione env solo all’interno dei tuoi file di configurazione. Una volta che la configurazione è stata memorizzata nella cache, il file .env non verrà caricato e tutte le chiamate alla funzione env per le variabili .env restituiranno null.
Cache degli Eventi
Se la tua applicazione utilizza la scoperta degli eventi, dovresti memorizzare nella cache la mappatura degli eventi con i listener durante il processo di distribuzione. Puoi farlo invocando il comando Artisan event:cache durante la distribuzione:
php artisan event:cache
Cache delle rotte
Se stai sviluppando un’applicazione di grandi dimensioni con molte rotte, assicurati di eseguire il comando Artisan route:cache durante il processo di distribuzione:
php artisan route:cache
Questo comando riduce tutte le registrazioni delle tue rotte in una singola chiamata di metodo all’interno di un file memorizzato nella cache, migliorando le prestazioni della registrazione delle rotte quando si registrano centinaia di rotte.
Cache delle Views
Quando distribuisci la tua applicazione in produzione, assicurati di eseguire il comando Artisan view:cache durante il processo di distribuzione:
php artisan view:cache
Questo comando precompila tutte le tue viste Blade in modo che non vengano compilati al momento, migliorando le prestazioni di ogni richiesta che restituisce una vista.
Modalità Debug
L’opzione “debug” nel file di configurazione config/app.php determina quante informazioni sull’errore vengono effettivamente visualizzate all’utente. Per impostazione predefinita, questa opzione è impostata per rispettare il valore della variabile di ambiente APP_DEBUG, che è memorizzata nel file .env dell’applicazione.
Nell’ambiente di produzione, questo valore dovrebbe essere sempre impostato su false. Se la variabile APP_DEBUG è impostata su true in produzione, si rischia di esporre valori di configurazione sensibili agli utenti finali dell’applicazione.
Distribuzione facile con Forge / Vapor
Laravel Forge
Se non sei ancora pronto per gestire la configurazione del server o non ti senti a tuo agio nel configurare tutti i vari servizi necessari per eseguire un’applicazione Laravel robusta, Laravel Forge è un’ottima alternativa.
Laravel Forge può creare server su vari provider di infrastrutture come DigitalOcean, Linode, AWS e altri. Inoltre, Forge installa e gestisce tutti gli strumenti necessari per creare applicazioni Laravel robuste, come Nginx, MySQL, Redis, Memcached, Beanstalk e altri.
Vuoi una guida completa per il deployment con Laravel Forge? Dai un’occhiata al Laravel Bootcamp e alla serie di video su Forge disponibili su Laracasts.
Laravel Vapor
Se desideri una piattaforma di deployment completamente serverless, con autoscaling, ottimizzata per Laravel, dai un’occhiata a Laravel Vapor. Laravel Vapor è una piattaforma di deployment serverless per Laravel, basata su AWS. Avvia la tua infrastruttura Laravel su Vapor e innamorati della semplicità scalabile del serverless. Laravel Vapor è stato ottimizzato dai creatori di Laravel per funzionare in modo impeccabile con il framework, in modo da poter continuare a scrivere le tue applicazioni Laravel esattamente come sei abituato.