Sebagian besar waktu, saya menyimpan konfigurasi aplikasi pengembangan di direktori root proyek, seperti ini:
app
|-- config.json
Tapi itu tampaknya bukan pendekatan terbaik, karena konfigurasi ini akhirnya disimpan dalam sistem kontrol versi - mungkin mengakibatkan nama pengguna, kata sandi, dan hal-hal sensitif lainnya bocor.
12 Panduan Faktor Aplikasi merekomendasikan untuk menjatuhkan file konfigurasi sekaligus dan menggunakan variabel lingkungan untuk pengaturan konfigurasi:
... menyimpan config dalam variabel lingkungan. Env vars mudah untuk diubah di antara penyebaran tanpa mengubah kode apa pun; tidak seperti file config, ada sedikit kemungkinan mereka diperiksa ke dalam kode repo secara tidak sengaja; dan tidak seperti file konfigurasi khusus, atau mekanisme konfigurasi lainnya seperti Java System Properties, mereka adalah bahasa-dan OS-standar agnostik.
Kedengarannya sangat bagus bagi saya, tetapi di mana satu toko mengatakan variabel lingkungan, tanpa memeriksa mereka ke dalam kontrol sumber? Dan alat apa yang bisa saya gunakan untuk meneruskan variabel ke aplikasi? Mungkin ada puluhan opsi konfigurasi, dan mengetiknya dengan tangan setiap kali Anda meluncurkan aplikasi tidak bagus - jadi mereka harus disimpan dalam beberapa jenis file di suatu tempat. Dengan demikian file tersebut akan berakhir di kontrol sumber, dan kami kembali ke tempat kami mulai.
Apakah ada cara penanganan opsi konfigurasi yang diterima secara universal, yang tidak memiliki risiko menyimpan konfigurasi lokal dalam kontrol sumber?
.gitignore
mana saya dapat mendefinisikan file atau folder yang tidak boleh diperiksa ke dalam kontrol versi. Seperti yang Anda katakan saya tidak melihat di mana Env vars benar-benar harus membantu, dengan Anda memiliki skrip untuk mengaturnya dan harus disimpan bersama dengan proyek atau Anda memilikinya 'di suatu tempat' di sistem Anda (direktori home atau bahkan di permulaan mesin skrip) yang tampaknya membuat banyak masalah sendiri, terutama jika banyak konfigurasi diperlukan. Bagaimanapun saya akan membagi file konfigurasi sehingga informasi rahasia masuk dalam file yang berbeda.