Развёртывание приложения и хранение средозависмых конфигов в проекте
Привет всем кто читает данный вопрос! На собеседовании дали задачу создать REST Api для обмена дисками и после выполнения данного задания в замечаниях написали, что нет инструкции по развёртыванию приложения (больше никаких уточнений нет) обнаружено хранение средозависимых конфигов в проекте. Можете подсказать, пожалуйста, что это значит? Я понимаю, что такое развёртывание приложения, но не понимаю как это сделать и с помощью каких технологий, какая должна быть инструкция? Насчет средозависимых конфигов я вообще не понял. Кидаю ссылку на GitHub-репозиторий данного проекта — https://github.com/ulxanxv/sharing
Ответы (1 шт):
Поставьте себя на место того, кто будет запускать приложение. Его будут интересовать ответы на вопросы:
- Что нужно чтобы собрать приложение?
- Как собрать приложение?
- Что нужно чтобы запустить приложение?
- Какие есть внешние зависимости?
- Какие есть параметры конфигурации приложения? Какие из них обязательные? Какие значения по умолчанию для параметров?
- Как запускать приложение?
- Как передавать приложению параметры?
- Какие шаги нужно сделать при начальной установке? При установке новой версии?
Чтобы были более понятны вопросы приведу примерный ответы (не полностью, а так чтоб суть была ясна).
Сборка
Для сборки нужны 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 и т.д.
Установка
Перед первым запуском приложения нужно выполнить команду такую-то, чтобы инициализровать БД.
При повторных запусках выполнить команду такую-то, чтобы применить миграции БД.
Средозависимые параметры
Теперь что касается средозависимых конфигов. Приложение будет запускаться в разных средах. Это могут быть:
- локальная среда разработки
- сервер continuous integration
- тестовая среда
- staging среда
- production среда
Вряд ли в production БД будет запущена на localhost. Параметры конфигурации соединения с БД это есть пример средозависимых параметров, т.е. в каждой среде они будут скорее всего отличатся. И нужна возможность из задавать независимо от самого собранного артефакта приложения (см. более детально о конфигурации в 12 factor app).