Я збираюся кинути тут шапку на ринг, тому що жодна з цих відповідей не стосується усіх найважливіших компонентів, які потребують будь-яка система. Міркування:
- Публічна конфігурація (що може бути видно в інтерфейсі) і приватна конфігурація (хлопець мограбі отримав це право). І забезпечення цього зберігається окремо.
- Секрети, як ключі
- Значення за замовчуванням та переорієнтація на середовище
- Фронтальні пучки
Ось як я мою конфігурацію:
config.default.private.js
- У контролі версій - це параметри конфігурації за замовчуванням, які може бачити лише ваш бекенд.
config.default.public.js
- У контролі версій - це параметри конфігурації за замовчуванням, які можна побачити за допомогою бекенда та фронтенда
config.dev.private.js
- Якщо вам потрібні різні приватні настройки за замовчуванням.
config.dev.public.js
- Якщо вам потрібні різні загальнодоступні параметри для розробника.
config.private.js
- Не в контролі версій, це параметри, що змінюють особливості середовища config.default.private.js
config.public.js
- Не в контролі версій, це параметри, що змінюють особливості середовища config.default.public.js
keys/
- Папка, де кожен файл зберігає різний секрет якогось роду. Це також не перебуває під контролем версій (ключі ніколи не повинні знаходитись під контролем версій).
Я використовую звичайні старі файли javascript для конфігурації, тому я маю повну потужність язика javascript (включаючи коментарі та можливість робити такі дії, як завантаження файлу конфігурації за замовчуванням у специфічний для оточуючого середовища файл, щоб потім їх можна було замінити). Якщо ви хочете використовувати змінні середовища, ви можете завантажити їх у ці файли конфігурацій (тому я рекомендую не використовувати env vars з тієї ж причини, що я не рекомендую використовувати файли json - у вас немає сили мови програмування для побудови ваш конфігурація).
Причина, що кожна клавіша знаходиться в окремому файлі, полягає у використанні інсталятора. Це дозволяє мати інсталятор, який створює ключі на машині та зберігає їх у папці ключів. Без цього інсталятор може вийти з ладу під час завантаження конфігураційного файла, який не може отримати доступ до ваших ключів. Таким чином, ви можете перейти до каталогу та завантажити будь-які ключові файли, які знаходяться у цій папці, не турбуючись про те, що існує, а що ні в будь-якій версії коду.
Оскільки у вас, ймовірно, є ключі, завантажені в приватній конфігурації, ви точно не хочете завантажувати свою приватну конфігурацію в будь-який код фронтенда. Хоча напевно суворіше ідеально повністю відокремити вашу кодову базу даних від вашого бекенда, багато разів, що PITA є достатньо великим бар'єром, щоб люди не могли це робити, таким чином, приватний та публічний конфігурації. Але я маю дві речі, щоб запобігти завантаженню приватного конфігурації у фронтенді:
- У мене є тестовий блок, який гарантує, що мої пакети фронтальних даних не містять жодного із секретних ключів, які я маю в приватній конфігурації.
- Я маю код фронтенду в іншій папці, ніж мій резервний код, і у мене є два різні файли з назвою "config.js" - по одному для кожного кінця. Для бекенда config.js завантажує приватну конфігурацію, для фронтену - загальнодоступну конфігурацію. Тоді ви завжди просто вимагаєте ('config') і не турбуєтесь, звідки це походить.
І останнє: ваша конфігурація повинна завантажуватися в браузер через повністю окремий файл, ніж будь-який інший код вашого фронту. Якщо ви поєднуєте свій код фронтенду, публічна конфігурація повинна будуватися як повністю окремий пакет. В іншому випадку ваша конфігурація насправді вже не є конфігурацією - її лише частиною вашого коду. Config потрібно вміти відрізнятись на різних машинах.