I files necessari per configurare un’applicazione sviluppata con Laravel si trovano tutti all’interno della cartella config dell’applicazione.
Poiché laravel può eseguire l’applicazione in diversi ambienti, locale – testing – produzione, per agevolare la configurazione nei diversi ambienti, laravel fa uso della libreria PHP DotEnv.
In particolare, dopo aver creato il vostro progetto laravel (mediante il comando laravel new nomeprogetto o attraverso composer create-project…), nella cartella dell’applicazione troverete il file .env (oppure il file .env.example da rinominare in .env).
Tutte le variabili di ambiente utilizzate nel file .env vengono analizzate come stringhe e, se necessario, convertite nel tipo richiesto (boolean, numeric ecc.).
Di seguito un estratto di un file .env di esempio:
APP_NAME=”GESTIONE ORDINI ROSSI s.r.l.”
APP_ENV=local
APP_KEY=base64:artettetek3czhVzf9CFFRHJHHKKAKK3444FFFFF=
APP_DEBUG=true
APP_URL=http://localhost/siti/ordini/public
PAGINAZIONE=10
LOG_CHANNEL=stack
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=ordini
DB_USERNAME=root
DB_PASSWORD=segreta
BROADCAST_DRIVER=log
CACHE_DRIVER=file
SESSION_DRIVER=file
SESSION_LIFETIME=120
QUEUE_DRIVER=sync
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=yyyyyyyyy
MAIL_PASSWORD=xxxxxxxxx
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=sito@rossisrl.it
MAIL_FROM_NAME=Rossi S.R.L.
PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=
PUSHER_APP_CLUSTER=mt1
MIX_PUSHER_APP_KEY=”${PUSHER_APP_KEY}”
MIX_PUSHER_APP_CLUSTER=”${PUSHER_APP_CLUSTER}”
Esaminando il listato si nota la presenza di molte variabili d’ambiente alle quali se ne possono aggiungere altre.
Tra le variabili più utilizzate spiccano APP_NAME (variabile contenente il nome dell’applicazione), APP_ENV (variabile il cui valore indica in quale ambiente ci si trova), APP_KEY (variabile contenente una stringa casuale di 32 caratteri, utilizzata per criptare/decriptare i cookies, inclusi i cockies di sessione. Qualora non venisse generata automaticamente o la si volesse rigenerare, basta usare il comando da console php artisan key:generate) APP_DEBUG (variabile booleana per attivare/disattivare la modalità di debug), APP_URL (variabile contenente l’url della DocumentRoot dell’applicazione). Di particolare rilevanza sono anche le variabili per configurare il database mysql e il server di posta SMTP.
Tutte le variabili presenti in questo file vengono automaticamente caricate nella variabile super globale $_ENV ogni volta che la nostra applicazione riceve una request, comunque per accedere alle varie variabili d’ambiente è possibile utilizzare anche la funzione helper env(“nome variabile”) che restituisce il valore della variabile, alla funzione è possibile passare un secondo parametro che viene restituito come valore di default qualora la variabile d’ambiente specificata nel primo parametro non esista.
Se diamo un’occhiata ad uno dei file di configurazione presenti nella cartella config, notiamo un largo uso di questa funzione:
Estratto del file config/app.php
|————————————————————————–
| Application Name
|————————————————————————–
|
| This value is the name of your application. This value is used when the
| framework needs to place the application’s name in a notification or
| any other location as required by the application or its packages.
|
*/
‘name’ => env(‘APP_NAME’, ‘Laravel’),
/*
|————————————————————————–
| Application Environment
|————————————————————————–
|
| This value determines the “environment” your application is currently
| running in. This may determine how you prefer to configure various
| services your application utilizes. Set this in your “.env” file.
|
*/
‘env’ => env(‘APP_ENV’, ‘production’),
/*
|————————————————————————–
| Application Debug Mode
|————————————————————————–
|
| When your application is in debug mode, detailed error messages with
| stack traces will be shown on every error that occurs within your
| application. If disabled, a simple generic error page is shown.
|
*/
‘debug’ => env(‘APP_DEBUG’, false),
/*
|————————————————————————–
| Application URL
|————————————————————————–
|
| This URL is used by the console to properly generate URLs when using
| the Artisan command line tool. You should set this to the root of
| your application so that it is used when running Artisan tasks.
|
*/
‘url’ => env(‘APP_URL’, ‘http://localhost’),
………continua
………?>
Di seguito Alcuni suggerimenti utili per una gestione sicura della configurazione:
- Se si sta utilizzando un programma di versioning, tipo GIT, per gestire le versioni del codice sorgente, è fortemente consigliato escludere il file .env durante le operazioni di commit, soprattutto se il progetto viene condiviso pubblicamente o con un team di sviluppatori.
- Qualora il progetto è condiviso con un team è utile fornire il file .env.example da usare come template
- Potrebbe essere utile creare un .env.testing che sovrascriverà automaticamente il .env quando si esegue PHPUNIT
- Se la variabile d’ambiente APP_DEBUG è settata a true, può essere molto utile occultare alcune variabili, per farlo si può creare nel file config/app.php una variabile debug_blacklist , che contenga l’elenco delle variabili da non mostrare durante la segnalazione delle eccezioni (errori run-time).
Esempio debug_blacklist nel file config/app.php
return [
// ...
'debug_blacklist' => [
'_ENV' => [
'APP_KEY',
'DB_PASSWORD',
],
'_SERVER' => [
'APP_KEY',
'DB_PASSWORD',
],
'_POST' => [
'password',
],
],
];
In fase di deployment è utile riunire tutte le variabili di configurazione dell’applicazione in un unico file, il modo per farlo è mediante il comando php artisan config:cache, ovviamente è sconsigliato farlo durante la fase di sviluppo, poiché la configurazione cambia spesso.
Durante la fase di aggiornamento del sito può risultare molto utile non rendere accessibile l’applicazione, per farlo ci viene in aiuto il comando php artisan, che va usato nel modo seguente
php artisan down (abilita la modalità manutenzione, visualizzando un messaggio di avviso predefinito)
Varianti di questo comando sono:
php artisan down –message=”Aggiornamento del database” –retry=60 (viene aggiunto un messaggio e un tempo stimato di ripristino)
php artisan down –allow=127.0.0.1 –allow=192.268.0.1/24 (consente ad alcuni host o intere sotto-reti di continuare ad usare l’applicazione anche durante la fase di manutenzione)