Разработка программного обеспечения — это путешествие, которое проходит через разные среды, каждая среда изолирована, что помогает эффективно разрабатывать программное обеспечение. Эта изоляция также помогает командам выполнять свою работу независимо. Если у нас есть три команды разработки, тестирования и создания контента с помощью изолированной среды, каждая команда может работать независимо и может достичь коллективной цели доставки программного обеспечения.
Каждая среда поставляется со своей собственной базой данных точек доступа, серверами API, уровнем ведения журнала, учетными данными и т. д. Вся эта информация называется конфигурациями, а управление всей этой информацией называется управлением конфигурацией.
Хорошо сконфигурированный проект помогает команде поддерживать проект на этапе обслуживания и проводить гибкую разработку, не нарушая существующие функции, которые создают позитивную среду в команде для создания новых функций без каких-либо опасений. Когда код не настраивается, а добавление новой функции требует значительных изменений в существующей кодовой базе, это всегда приводило к некоторым новым ошибкам, и команда боялась разрабатывать новые функции.
Каждое конфигурируемое программное обеспечение должно иметь четыре эмпирических правила для конфигураций.
Гибкость
Безопасность
Детальность
Разделение конфигурации
Гибкость
В большинстве случаев задача управления конфигурацией переносится на панель команды Dev-Ops, что приводит к зависимости разработки. Конфигурация должна быть достаточно гибкой, чтобы разработчик мог изменить ее, запустить и воспроизвести проблему в среде разработки.
Безопасность
Управление конфигурацией должно быть безопасным, закрытые ключи и учетные данные не должны передаваться в репозиторий, чтобы избежать несанкционированного доступа к системе.
Подробность
Конфигурация должна быть подробной и не должна повторяться снова и снова для каждой среды. Обычный подход для этого — начать с базового файла конфигурации и переопределить значения в зависимости от среды.
Разделение конфигурации
Отделение конфигурации от кода является хорошим подходом и общей передовой практикой, работа по управлению конфигурацией может быть отделена как отдельный процесс и имеет слабую связь с кодовой базой и могут поддерживаться индивидуально, не касаясь кода.
При таком подходе мы ввели большую часть конфигурации в качестве переменной среды, и приложение получает доступ к этим переменным для запуска программного обеспечения в соответствии со средой.
Верно и то, что полное разделение конфигурации невозможно, поэтому мы используем смешанный подход Separation of Configuration as much as possible + load configuration based on environment variable
.
Git клонирует это репо - https://github.com/vinaymavi/node-js-configuration-management-.git
Это простой пример сервера express.js
, который загрузит конфигурацию в соответствии с предоставленным environment
и запустит сервер.
Папка src/config/
содержит все файлы конфигурации. этот модуль конфигурации имеет базовый файл конфигурации
два других файла
и
для обновления конфигурации в соответствии со средой.
src/config/index.js
файл модуля прочитан environment variable
из процесса и возвращает конфигурацию в соответствии с ним. по умолчанию сервер работает в режиме development
$ node index.js
и вернуть весь файл конфигурации в качестве ответа.
Мы можем изменить среду с помощью переменной среды export ENV=PROD
, теперь тот же сервер работает с конфигурацией prod.
$ node index.js
мы можем установить переменные среды в файле .env
.
этот подход обеспечивает разделение конфигурации путем установки переменной среды в соответствии с средой, теперь наше приложение будет работать в соответствии с средой, при условии, что переменная среды не требует изменения какого-либо кода в соответствии с средой.
У нас есть dotenv
модуль https://www.npmjs.com/package/dotenv
, который автоматически загружает .env
файл и устанавливает все предоставляемые переменные в среду.
$ yarn add dotenv
добавить require(‘dotenv’).config()
поверх файла сервера index.js