Nella lezione precedente abbiamo fatto riferimento al file .env
senza entrare in dettaglio delle sue caratteristiche. Come probabilmente avrà intuito il lettore, si tratta di un file in cui sono contenute le variabili d'ambiente necessarie al funzionamento del progetto corrente.
Cosa si intende però per ambiente? con questo termine facciamo riferimento al contesto in cui sta girando l’applicazione in un determinato momento.
Nel nostro container Docker abbiamo di default due ambienti: dev
e test
. Il primo environment è utile per le normali sessioni di sviluppo (risponde ad esempio al caricamento di una pagina da browser Web), il secondo si attiva quando facciamo funzionare la nostra suite di test. Oltre agli ambienti di sviluppo, però, avremo sicuramente un ambiente di produzione, prod
, in cui caricheremo il nostro lavoro una volta completato e, auspicabilmente, un ambiente di staging
in cui provare eventuali modifiche prima di caricarle in produzione.
Dati questi (almeno) 4 ambienti su cui la nostra applicazione girerà, abbiamo la necessità di configurare per ognuno di essi delle informazioni che sicuramente saranno differenti. Basti pensare alle credenziali di accesso al database che saranno diverse in base all'ambiente su cui lavoriamo.
Negli anni la gestione delle configurazioni dei vari ambienti è notevolmente cambiata su Symfony, fino ad arrivare alla situazione corrente. Come anticipato, il file .env
contiene le configurazioni di default necessarie che verranno poi iniettate al container di Symfony. Questo file è consigliabile committarlo in modo da poterlo distribuire al team.
Esistono inoltre altri file .env
che vengono gestiti da Symfony e sono i seguenti:
.env.local
: sovrascrive quanto scritto sul file.env
per il solo ambiente locale su cui si sta lavorando in questo momento. Un esempio di caso d’uso potrebbe essere: definiamo nel file.env
le variabili che vogliamo far usare al nostro team delegando ai singoli, ad esempio, l'IP della macchina su cui far girare l'applicazione. Questo file non deve essere committato..env.$APP_ENV
: stessa logica del file.env
con la differenza che viene specifico per l'ambiente$APP_ENV
. Questo file va sotto controllo di versione ma non dovrebbe contenere dati sensibili come, ad esempio, le credenziali di accesso al database..env.$APP_ENV.local
: stessa logica del file.env
solo che è specifico per l'ambiente$APP_ENV
. Questo file non deve essere committato e, personalmente, consiglio di evitarne l'utilizzo in favore di.env.local
.
Le variabili che definiamo all'interno di questi file possono essere poi utilizzate all'interno dei file di configurazione dell'applicazione.