Virtual Environment Services (VES) Workflow
Этот гайд описывает работу с изолированными сервисами в HSM через рантайм uv.
1. Концепция VES
Virtual Environment Services (VES) — это механизм HSM, позволяющий запускать сервисы в полностью изолированных Python-окружениях (venv) с собственными pyproject.toml и uv.lock.
Это решает проблему "ада зависимостей" в монорепозиториях и сложных проектах, где разным частям системы нужны конфликтующие версии библиотек.
2. Создание нового сервиса
Для создания изолированного сервиса используйте команду hsm service init:
hsm service init my-worker --runtime uv
Что произойдет:
- В папке
services/my-workerбудет создан новый проект (uv init --no-workspace). - Сервис будет автоматически зарегистрирован в локальном реестре
hsm-registry/services/my-worker.yaml. - Сервис будет добавлен в ваш
hsm.yaml.
3. Управление зависимостями сервиса
Зависимости изолированного сервиса описываются в его собственном манифесте в реестре.
Добавление зависимости через CLI:
hsm registry service add my-worker --dependency my-shared-lib
При выполнении hsm sync, HSM:
- Обнаружит, что
my-workerтребуетmy-shared-lib. - Найдет
my-shared-libв реестре. - Инжектирует правильный путь (локальный или git) в
services/my-worker/pyproject.toml. - Выполнит
uv syncвнутри директории сервиса.
4. Проброс контекста (ENV) через Implies
VES сервисы поддерживают получение параметров через механизм implies. Это позволяет библиотекам или другим сервисам настраивать ваш сервис.
Пример: библиотека db-client подразумевает настройку сервиса my-worker:
# hsm-registry/libraries/db-client.yaml
name: db-client
implies:
service:my-worker:
params:
DB_URL: "postgres://localhost:5432/mydb"
При синхронизации HSM пробросит DB_URL в переменные окружения при запуске команд внутри my-worker.
5. Синхронизация и проверка
Команда hsm sync автоматически обрабатывает все VES сервисы:
hsm sync
Для проверки того, что сервис действительно изолирован и использует правильные версии пакетов, HSM использует EnvironmentInspector. Вы можете увидеть отчет о верификации сразу после синхронизации.
6. Режимы Dev и Prod
- Dev: Сервис использует локальный исходный код (если указан
devsource). - Prod: HSM автоматически клонирует репозиторий сервиса из Git в папку
services/и собирает окружение на основеuv.lockиз репозитория.