Недавно я читал дебаты на тему « Где хранить свойства, зависящие от среды? ».
Классический способ состоит в том, чтобы иметь несколько файлов свойств, по одному для среды и на основе переменной среды (DEV, PROD ...), вы выбираете, где их читать при запуске приложения (как в случае профилей Spring).
С другой стороны, если вы используете контейнер для развертывания приложения, говорят, что этот тип конфигурации должен исходить из самой среды (с использованием переменных среды, которые приложение читает), поэтому изображение не меняется между средами.
Каковы плюсы и минусы каждого подхода? Есть ли «лучший» подход для контейнерного сценария?
docker
containers
configuration
carcaret
источник
источник
Ответы:
Кто сказал, что файлы свойств и переменные окружения где взаимоисключающие?
Необходимо проводить различие между «где хранить конфигурацию моего приложения?» И "откуда у моего приложения источник его конфигурации?"
Наиболее вероятным результатом является то, что каждый, вероятно, должен просто продолжать делать то, что он делает с файлами конфигурации в качестве механизма хранения (подумайте о долгосрочном, постоянном состоянии в течение всего времени, пока существует среда).
Однако вместо того, чтобы помещать этот файл конфигурации в контекст приложения и запускать его, приложение должно просто ожидать, что эти переменные уже будут доступны в среде при запуске.
Это означает, что вам нужно иметь два рабочих процесса развертывания:
Чтобы использовать пример управления переменными среды в качестве пар «ключ-значение» в таком инструменте, как консул, если вы храните файлы конфигурации в git, тогда такие инструменты, как git2consul, позволяют обрабатывать эту конфигурацию в среде при ее обновлении.
Если у вас есть приложение, которое ожидает, что конфигурация будет доступна в виде файла конфигурации, тогда вы можете избежать отправки нескольких копий файла конфигурации вместе с приложением, создав процесс развертывания с чем-то вроде consul-template, который может повернуть ваш файл. значения консула обратно в файл.
источник
У нас есть 3 штуки (или артефакты) для каждого работающего приложения.
Файл конфигурации находится в отдельном исходном контроле. Раньше это был Git, но сейчас мы используем SaaS, который мы создали под названием Config, на http://www.configapp.com . Основной особенностью Config является простота управления конфигурацией, специфичной для конкретной среды. Чтобы запустить наше приложение на новом сервере, мы извлекаем контейнер Docker, артефакт приложения и файл конфигурации для этой среды. В контейнере мы монтируем каталог, в котором хранится приложение и файл конфигурации, как часть запуска контейнера. Наше приложение то же самое. Наш контейнер / изображение такое же. Только файл конфигурации отличается.
Что касается файла конфигурации против переменных среды. Долгое время мы использовали файлы конфигурации. Когда мы использовали PaaS / cloud, мы использовали переменные среды. Это было дополнительной работой, если у вас много настроек, поэтому мы использовали переменные среды для определения правильного файла конфигурации. У нас есть одно приложение, которое превратило свойства в переменные окружения, но это нетипично. Если у нас есть санкционированный компанией сервер централизованной конфигурации, мы используем его, в противном случае нам нравится простота файлов конфигурации.
Итак, для подведения итогов мы извлекаем app.jar, app.properties, openjdk Docker. Затем мы запускаем openjdk Docker, монтируя расположение app.jar и app.properties. Единственное, что специфично для среды - это app.properties. Чтобы легко управлять app.properties, независимо от того, сколько ключей свойств, сред, экземпляров кластера / региона, мы используем Config.
источник