12 факторов. Фактор №3 — Конфигурирование

02.08.2018admin

Фактор №3 — Конфигурирование (config, configuration) — третий постулат методологии разработки 12 факторных приложений. Всю суть данного пункта можно уместить в рамках одного предложения: параметры развёртывания должны храниться в среде исполнения. Всё, что меняется в логике работы приложения при развёртывании в разных средах — всё это и есть конфигурацией. К примеру: ключи доступа к внешним API (к примеру sandbox ключи для дева и рабочие ключи для продакшн), настройки параметров подключения к базе данных (для DEV, PROD сред), системы хранения кэша или другие зависимые от среды значения (почта, права и т.д.).

Бывает, что все подобные значения могут храниться в виде констант в исходном коде в том или ином виде. Этот подход является нарушением 12 факторного приложения, т.к. от развёртывания на локальном компьютере — до деплоя в продакшн версию код не должен отличаться. Этот пункт также необходимо соблюдать и для среды тестирования. Т.е. единая кодовая база — всегда и везде. Хорошей проверкой грамотного устройства конфигурации является то, что ваша кодовая база не должна компрометировать никакие доступы, связанные с разворачиванием — будьто API ключи или credentials для подключения к базе данных.

Исходя из вышесказанного хочется сделать небольшое уточнение — существует конфигурация, которая работает с какими-либо внутренними функциями вашего приложения. К примеру, локализация или настройки стиля. Всё, что не относится к развёртыванию и деплою (локализация, к примеру, может быть задействована и там, и там) — можно смело хранить в репозитории с кодовой базой. Подобные «внутренние» конфиги, как правило, оформляют в некоторый .gitignore, чтобы каждый такой файл существовал только в том месте, где запускается — на локальной машине разработчика, к примеру.

Единственным правильным и желательным способом хранения настроек конфигурации являются переменные окружения (environment variables). Это просто, легко и одинаково доступно во всех операционных системах. Мы не используем файлы, мы читаем конфигурацию из среды окружения.

Leave a comment

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Предыдущая запись