Я не думаю, що існує єдине рішення, яке працює для всіх випадків, оскільки воно може залежати від чутливості даних у конфігураційних файлах, або мови програмування, яку ви використовуєте, та багатьох інших факторів. Але я думаю, що важливо тримати конфігураційні файли для всіх середовищ під контролем джерела, щоб ви завжди могли знати, коли вони були змінені, і ким, і, що більш важливо, мати можливість відновити його, якщо щось піде не так. І вони будуть.
Тож ось як я це роблю. Зазвичай це для проектів nodejs, але я думаю, що це працює і для інших фреймворків та мов.
Що я роблю, це створюю configs
каталог в корені проекту, і в цьому каталозі зберігаю декілька файлів для всіх середовищ (а іноді і окремі файли для середовища кожного розробника), які всі відстежуються в контролі джерела. І є власне файл, який код використовує, названий config
у корені проекту. Це єдиний файл, який не відстежується. Тож виглядає так
root
|
|- config (not tracked)
|
|- configs/ (all tracked)
|- development
|- staging
|- live
|- James
Коли хтось перевіряє проект, він копіює файл конфігурації, який він хоче використати у невідстежуваному config
файлі, і він може вільно редагувати його, як хоче, але також відповідає за копіювання цих змін до того, як він зафіксує інші файли середовища за необхідності.
А на серверах відстежуваний файл може бути просто копією (або посиланням) відстежуваного файлу, що відповідає цьому середовищу. У JS ви можете просто мати 1 рядок, щоб вимагати цей файл.
Спочатку цей потік може бути дещо складним, але він має великі переваги: 1. Вам ніколи не доведеться турбуватися про те, що конфігураційний файл буде видалений або змінений на сервері, не маючи резервної копії. Те саме, якщо розробник має власну конфігурацію на своєму машина та його машина перестають працювати з будь-якої причини 3. Перед будь-яким розгортанням ви можете розробити конфігураційні файли development
і, staging
наприклад, і перевірити, чи немає чого-небудь відсутнього чи зламаного.