Как управлять конфигурацией Spring-boot приложений для разных сред? - PullRequest
0 голосов
/ 16 мая 2018

У меня есть приложение с загрузочной пружиной, которое работает в разных средах (dev, qa, prod).Для создания неизменяемых сборок, которые могут работать во всех средах без каких-либо изменений, я упаковал файлы конфигурации для конкретной среды в сам сгенерированный jar-файл.Но это создает еще одну проблему предоставления учетных данных рабочей базы данных команде разработчиков.Я могу использовать внешний сервер конфигурации, но для меня это пока излишне.

Как мне управлять этими файлами конфигурации, чтобы избежать утечки информации и иметь неизменяемые сборки для поддержки CI / CD?

Ответы [ 4 ]

0 голосов
/ 16 мая 2018

Вы можете создавать yml-файлы для разных профилей и указывать профиль в аргументах JVM.

  1. Установить общие параметры для всех профилей в application.yml
  2. Параметры для определенного профиля установлены в application-name.yml
  3. Установить профиль в аргументах JVM: java -jar -Dspring.profiles.active=name или в .conf файле: JAVA_OPTS=-Dspring.profiles.active=name
  4. То же, что параметры профиля в БД: java -jar -Dspring.datasource.username=name -Dspring.datasource.password=pass

Подробнее

0 голосов
/ 16 мая 2018

Сохранение ваших учетных данных внутри приложения кажется небезопасной практикой. Вы можете сохранить учетные данные извне (внешний сервер для сохранения секретов или может находиться на одном сервере внутри другого приложения или переменных env). Чтение данных через env varables сохранит вашу сборку без изменений.

Если вы используете какие-либо облачные сервисы, такие как aws или pivotal, у них есть такие сервисы для хранения ваших секретов.

0 голосов
/ 16 мая 2018

Большая часть моего конфигурационного файла приложения (например, application.yml) выглядит так:

  datasource:
    username: {database_username:root}
    password: {database_password:root123}
    sql-script-encoding: utf-8
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://{database_host:localhost}:3306/dbname?useUnicode=true&characterEncoding=utf-8

Если переменная окружения присутствует, приложение загрузит конфигурацию из окружения. в противном случае будет использоваться значение по умолчанию.

После этого вы можете собрать один пакет и запускать его везде.

В моем случае я создаю приложение в образ докера и запускаю в kubernetes, чтобы свойства конфигурации сохранялись в ConfigMaps и Secret.

Когда Pod работает, загружаются файлы конфигурации и секретная переменная окружения.

И, конечно, вы можете использовать и другие инструменты.

0 голосов
/ 16 мая 2018

Для утечки данных желательно зашифровать имя пользователя / пароль с помощью jasypt.

приложение подключается к базе данных

https://github.com/ulisesbocchio/jasypt-spring-boot

Пароль для расшифровки должен быть на машине, однако, так что он должен быть уже там, максимально защищен (например, другой пользователь, или https://github.com/certnanny/KeyNanny)

Я бы не стал помещать конфигурацию в jar-файл. Это не часть логики приложения, это часть процесса развертывания, и развертыватель должен иметь возможность легко добавлять новые машины. Если вы используете докер, то, конечно, все по-другому.

...