Distribuzione

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 funzione env 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 funzione env per le variabili .env restituiranno null.

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 variabile APP_DEBUG è impostata su true 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.

Lascia un commento

Lascia un commento

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