Развёртывание приложения и хранение средозависмых конфигов в проекте

Привет всем кто читает данный вопрос! На собеседовании дали задачу создать REST Api для обмена дисками и после выполнения данного задания в замечаниях написали, что нет инструкции по развёртыванию приложения (больше никаких уточнений нет) обнаружено хранение средозависимых конфигов в проекте. Можете подсказать, пожалуйста, что это значит? Я понимаю, что такое развёртывание приложения, но не понимаю как это сделать и с помощью каких технологий, какая должна быть инструкция? Насчет средозависимых конфигов я вообще не понял. Кидаю ссылку на GitHub-репозиторий данного проекта — https://github.com/ulxanxv/sharing


Ответы (1 шт):

Автор решения: Roman Konoval

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

  1. Что нужно чтобы собрать приложение?
  2. Как собрать приложение?
  3. Что нужно чтобы запустить приложение?
  4. Какие есть внешние зависимости?
  5. Какие есть параметры конфигурации приложения? Какие из них обязательные? Какие значения по умолчанию для параметров?
  6. Как запускать приложение?
  7. Как передавать приложению параметры?
  8. Какие шаги нужно сделать при начальной установке? При установке новой версии?

Чтобы были более понятны вопросы приведу примерный ответы (не полностью, а так чтоб суть была ясна).

Сборка

Для сборки нужны jdk 8+, mvn 3.x+. Команда для сборки, из корня проекта:

mvn install

Выходной артефакт build/libs/myapp.jar.

Запуск

Внешние зависимости

Для работы нужны:

  • jre 8+
  • postgresql версиии 11+.
Конфигурация

Для соединения с постгрес нужно задать параметры (с описанием что каждый означает, если не очевидно):

  • HOST
  • PORT
  • DB_NAME
  • DB_USER_NAME
  • DB_PASSWORD

По умолчанию приложение соединяется с localhost:5432, DB_NAME=xxx, DB_USER=..., DB_PASSWORD=...

Параметры приложению можно задать такими способами:

  • переменные среды (включая соглашения по именованию и т.д.)
  • файл конфигурации (с описанием структуры и того как этот файл задать приложению при старте)
  • и т.п.
Команда для запуска
java -jar myapp.jar param1 param2 и т.д.

Установка

Перед первым запуском приложения нужно выполнить команду такую-то, чтобы инициализровать БД.

При повторных запусках выполнить команду такую-то, чтобы применить миграции БД.

Средозависимые параметры

Теперь что касается средозависимых конфигов. Приложение будет запускаться в разных средах. Это могут быть:

  1. локальная среда разработки
  2. сервер continuous integration
  3. тестовая среда
  4. staging среда
  5. production среда

Вряд ли в production БД будет запущена на localhost. Параметры конфигурации соединения с БД это есть пример средозависимых параметров, т.е. в каждой среде они будут скорее всего отличатся. И нужна возможность из задавать независимо от самого собранного артефакта приложения (см. более детально о конфигурации в 12 factor app).

→ Ссылка