HSM: Docker Workflow Deep Dive
Этот документ описывает, как hsm управляет инфраструктурными сервисами на базе Docker, обеспечивая гибкость разработки и надежность продакшена.
1. Проблема: Статичность Docker Compose
Традиционный docker-compose.yml статичен. Разработчику часто приходится:
- Комментировать/раскомментировать сервисы.
- Вручную менять
imageнаbuildпри переходе к разработке компонента. - Следить за тем, чтобы локальные пути не попали в репозиторий.
2. Решение HSM: Динамическая генерация Override
HSM использует мощь Profiles и Override-файлов, чтобы превратить Docker Compose в динамическую среду.
Преимущества HSM для Docker:
- Profiles Management: HSM автоматически активирует нужные профили сервисов на основе выбранных групп в
hsm.yaml. - Seamless Mode Switch: Переключение между "готовым образом" и "сборкой из исходников" одной командой.
- Ephemeral Overrides: Все локальные пути и настройки разработки живут в генерируемом файле
docker-compose.hsm.yml, который не засоряет основной конфиг.
3. Детальный процесс (Step-by-Step)
А. Режим Разработки (Dev)
Когда сервис переведен в dev:
- Cloning: HSM обеспечивает наличие исходного кода сервиса.
- Override Generation: HSM создает
docker-compose.hsm.yml, где для сервиса:imageзаменяется наbuild(если указанbuild-path).- Прописываются
dev-volumesдля монтирования локального кода (Hot Reload). - Устанавливаются переменные окружения для дебага.
- Execution:
hsm syncподготавливает всё необходимое. Запуск осуществляется через стандартныйdocker composeс подключением сгенерированного файла.
Б. Режим Продакшена (Prod)
При переключении в prod:
- Image Resolution: HSM берет актуальную версию образа из Реестра.
- Clean Override: В генерируемом файле указывается только
imageи необходимые лимиты. - Deployment: Готовый файл можно использовать для деплоя на сервер.
4. Группы сервисов (1-of-N)
Это одна из самых мощных функций. Вы можете определить группу database и переключаться между postgres и mysql в hsm.yaml. HSM сам перестроит docker compose так, чтобы под логическим именем db в вашей сети поднялся нужный контейнер.
5. Implication Merging (Слияние параметров)
В сложных системах несколько пакетов могут требовать один и тот же сервис, но с разными настройками. HSM автоматически объединяет эти требования. Например, если два плагина требуют разные базы данных в одном Postgres, HSM сгенерирует конфигурацию с объединенным списком БД, используя синтаксис ${HSM_MERGED_PARAMS.db_name} в манифесте сервиса.
5. Итог
HSM превращает Docker из "просто контейнеров" в гибкий конструктор. Вы управляете стеком (Stack), а не отдельными файлами конфигурации.