Большую часть времени я храню конфигурацию приложения разработки в корневой директории проекта, например:
app
|-- config.json
Но это, похоже, не лучший подход, так как этот конфиг в конечном итоге хранится в системе контроля версий - возможно, это приводит к утечке имен пользователей, паролей и других важных вещей.
12 Руководство по Factor App рекомендует полностью удалить файлы конфигурации и использовать переменные среды для настройки конфигурации:
... сохраняет конфигурацию в переменных окружения. Env vars легко переключать между развертываниями без изменения кода; в отличие от конфигурационных файлов, существует небольшая вероятность того, что они случайно попадут в репозиторий; и в отличие от пользовательских файлов конфигурации или других механизмов конфигурации, таких как Java System Properties, они являются независимым от языка и ОС стандартом.
Это звучит очень хорошо для меня, но где хранить эти переменные среды, не проверяя их в системе контроля версий? И какие инструменты я могу использовать для передачи этих переменных в приложение? Может быть множество параметров конфигурации, и вводить их вручную каждый раз, когда вы запускаете приложение, нехорошо - поэтому их нужно где-то хранить в каком-то файле. Таким образом, указанный файл окажется в системе контроля версий, и мы вернемся туда, откуда начали.
Существует ли какой-либо общепринятый способ обработки параметров конфигурации, в котором нет риска сохранения локальной конфигурации в системе контроля версий?
.gitignore
где я могу определять файлы или папки, которые не должны проверяться в управлении версиями. Как вы говорите, я не вижу, в чем действительно могут помочь Env vars, у вас есть скрипт для их установки, который должен храниться вместе с проектом или у вас они «где-то» в вашей системе (домашний каталог или даже при запуске компьютеров). скрипты), что само по себе создает множество проблем, особенно если необходимо много настроек. В любом случае я бы разделил файлы конфигурации так, чтобы конфиденциальная информация помещалась в разные файлы.