Prologo
Primi Passi
Architettura
Le Basi
Approfondimenti
Package
Distribuzione
- Introduzione
- Requisiti del Server
- Configurazione del Server
- Ottimizzazione
- Modalità di Debug
- Rotta per Health Check
- Distribuzione Semplice con Forge / Vapor
Introduzione
Quando sei pronto a distribuire la tua applicazione Laravel in produzione, ci sono alcune cose importanti che puoi fare per assicurarti che la tua applicazione funzioni nel modo più efficiente possibile. In questo documento, copriremo alcuni ottimi punti di partenza per garantire che la tua applicazione Laravel sia rilasciata correttamente.
Requisiti del Server
Il framework Laravel ha alcuni requisiti di sistema. Assicurati che il tuo server web abbia la versione minima di PHP e le seguenti estensioni:
- PHP >= 8.2
- Estensione PHP Ctype
- Estensione PHP cURL
- Estensione PHP DOM
- Estensione PHP Fileinfo
- Estensione PHP Filter
- Estensione PHP Hash
- Estensione PHP Mbstring
- Estensione PHP OpenSSL
- Estensione PHP PCRE
- Estensione PHP PDO
- Estensione PHP Session
- Estensione PHP Tokenizer
- Estensione PHP XML
Configurazione del Server
Nginx
Se stai rilasciando la tua applicazione su un server che utilizza Nginx, puoi usare il seguente file di configurazione come punto di partenza per impostare il tuo server web. Probabilmente, dovrai personalizzare questo file in base alla configurazione del tuo server. Se hai bisogno di assistenza nella gestione del server, considera l’uso di un servizio di gestione e distribuzione server first-party di Laravel come Laravel Forge.
Assicurati che, come nella configurazione sottostante, il tuo server web reindirizzi tutte le richieste al file public/index.php
della tua applicazione. Non dovresti mai spostare il file index.php
nella root del tuo progetto, poiché servire l’applicazione dalla root 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 ~ ^/index\.php(/|$) {
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_hide_header X-Powered-By;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
FrankenPHP
FrankenPHP può essere usato anche per servire le tue applicazioni Laravel. FrankenPHP è un server applicativo PHP moderno scritto in Go. Per servire un’applicazione Laravel PHP usando FrankenPHP, puoi semplicemente usare il comando php-server
:
frankenphp php-server -r public/
Per sfruttare funzionalità più avanzate supportate da FrankenPHP, come l’integrazione con Laravel Octane, HTTP/3, compressione moderna o la possibilità di impacchettare le applicazioni Laravel come binari autonomi, consulta la documentazione Laravel di FrankenPHP.
Permessi delle Directory
Laravel deve poter scrivere nelle directory bootstrap/cache
e storage
, quindi devi assicurarti che tutti i processi di rilascio ed esecuzione dell’app sul server web abbiano i permessi di scrittura su queste directory.
Ottimizzazione
Quando distribuisci la tua applicazione in produzione, ci sono diversi file che dovrebbero essere memorizzati nella cache, inclusi configurazioni, eventi, rotte e viste. Laravel fornisce un unico e comodo comando Artisan optimize
che memorizzerà nella cache tutti questi file. Questo comando dovrebbe essere tipicamente eseguito come parte del processo di distribuzione della tua applicazione:
php artisan optimize
Il metodo optimize:clear
può essere utilizzato per rimuovere tutti i file di cache generati dal comando optimize
oltre a tutte le chiavi nel driver di cache predefinito:
php artisan optimize:clear
Nella documentazione seguente, discuteremo ciascuno dei comandi di ottimizzazione granulari eseguiti dal comando optimize
.
Caching della Configurazione
Quando distribuisci la tua applicazione in produzione, dovresti assicurarti di eseguire il comando Artisan config:cache
durante il processo di distribuzione:
php artisan config:cache
Questo comando unirà tutti i file di configurazione di Laravel in un unico file cache, riducendo notevolmente il numero di accessi al filesystem che il framework deve fare per caricare i valori di configurazione.
Se esegui il comando
config:cache
durante il processo di distribuzione, assicurati di chiamare la funzioneenv
solo all’interno dei file di configurazione. Una volta che la configurazione è stata memorizzata nella cache, il file.env
non verrà caricato e tutte le chiamate alla funzioneenv
per le variabili.env
restituirannonull
.
Caching degli Eventi
Dovresti memorizzare nella cache le mappature automatiche tra eventi e listener della tua applicazione durante il processo di distribuzione. Puoi farlo eseguendo il comando Artisan event:cache
durante la distribuzione:
php artisan event:cache
Caching delle Rotte
Se stai sviluppando un’applicazione grande con molte rotte, assicurati di eseguire il comando Artisan route:cache
durante il processo di distribuzione:
php artisan route:cache
Questo comando unifica tutte le registrazioni delle rotte in una singola chiamata di metodo all’interno di un file cache, migliorando le prestazioni della registrazione delle rotte quando ne hai centinaia.
Caching delle View
Quando distribuisci la tua applicazione in produzione, dovresti assicurarti di eseguire il comando Artisan view:cache
durante il processo di deploy:
php artisan view:cache
Questo comando precompila tutte le tue Blade views in modo che non vengano compilate al volo, migliorando le prestazioni di ogni richiesta che restituisce una view.
Modalità di Debug
L’opzione di debug nel tuo file di configurazione config/app.php
determina quante informazioni su un errore vengono effettivamente mostrate all’utente. Per impostazione predefinita, questa opzione è impostata per rispettare il valore della variabile d’ambiente APP_DEBUG
, che è memorizzata nel file .env
della tua applicazione.
Nel tuo ambiente di produzione, questo valore dovrebbe sempre essere
false
. Se la variabileAPP_DEBUG
è impostata sutrue
in produzione, rischi di esporre valori di configurazione sensibili agli utenti finali della tua applicazione.
Rotta per Health Check
Laravel include una route di controllo dello stato integrata che può essere utilizzata per monitorare lo salute della tua applicazione. In produzione, questa route può essere usata per segnalare lo stato della tua applicazione a un monitor di uptime, un bilanciatore di carico o un sistema di orchestrazione come Kubernetes.
Per impostazione predefinita, la route di controllo dello stato è disponibile su /up
e restituirà una risposta HTTP 200 se l’applicazione si è avviata senza eccezioni. Altrimenti, verrà restituita una risposta HTTP 500. Puoi configurare l’URI per questa route nel file bootstrap/app
della tua applicazione:
->withRouting(
web: __DIR__.'/../routes/web.php',
commands: __DIR__.'/../routes/console.php',
health: '/up', // [tl! remove]
health: '/status', // [tl! add]
)
Quando vengono effettuate richieste HTTP a questa route, Laravel dispatcherà anche un evento Illuminate\Foundation\Events\DiagnosingHealth
, permettendoti di eseguire controlli di salute aggiuntivi rilevanti per la tua applicazione. All’interno di un listener per questo evento, puoi verificare lo stato del database o della cache della tua applicazione. Se rilevi un problema con la tua applicazione, puoi semplicemente lanciare un’eccezione dal listener.
Distribuzione Semplice con Forge / Vapor
Laravel Forge
Se non sei ancora pronto a gestire la configurazione del tuo server o non ti senti a tuo agio nel configurare tutti i vari servizi necessari per eseguire un’applicazione Laravel stabile e robusta, Laravel Forge è un’ottima alternativa.
Laravel Forge può creare server su diversi provider di infrastruttura come DigitalOcean, Linode, AWS e altri. Inoltre, Forge installa e gestisce tutti gli strumenti necessari per costruire applicazioni Laravel solide, come Nginx, MySQL, Redis, Memcached, Beanstalk e altro ancora.
Vuoi una guida completa per il deployment con Laravel Forge? Dai un’occhiata al Laravel Bootcamp e alla serie di video di Forge disponibile su Laracasts.
Laravel Vapor
Se desideri una piattaforma di deployment completamente serverless e auto-scalante, ottimizzata per Laravel, dai un’occhiata a Laravel Vapor. Laravel Vapor è una piattaforma di deployment serverless per Laravel, alimentata da AWS. Avvia la tua infrastruttura Laravel su Vapor e scopri la semplicità scalabile del serverless. Laravel Vapor è perfezionato dai creatori di Laravel per funzionare senza problemi con il framework, così puoi continuare a scrivere le tue applicazioni Laravel proprio come sei abituato.