La maggior parte delle volte, memorizzo la configurazione dell'applicazione di sviluppo nella directory principale del progetto, in questo modo:
app
|-- config.json
Ma questo non sembra essere l'approccio migliore, dal momento che questa configurazione finisce per essere archiviata nel sistema di controllo delle versioni, con possibili nomi utente, password e altre cose sensibili trapelate.
La guida di 12 Fattori consiglia di eliminare del tutto i file di configurazione e di utilizzare le variabili di ambiente per l'installazione della configurazione:
... stores config in environment variables. Env vars are easy to change between deploys without changing any code; unlike config files, there is little chance of them being checked into the code repo accidentally; and unlike custom config files, or other config mechanisms such as Java System Properties, they are a language- and OS-agnostic standard.
Mi sembra molto bello, ma dove si memorizzano le variabili d'ambiente, senza controllarle nel controllo del codice sorgente? E quali strumenti posso utilizzare per passare tali variabili all'app? Ci possono essere dozzine di opzioni di configurazione e digitarle a mano ogni volta che si avvia l'app non è bello, quindi devono essere archiviate in qualche tipo di file da qualche parte. Detto file finirà nel controllo del codice sorgente e torneremo al punto da cui siamo partiti.
Esiste un modo universalmente accettato di gestire le opzioni di configurazione, che non ha il rischio di memorizzare la configurazione locale nel controllo del codice sorgente?