Перейти к содержанию

Состав поставки

Статья перечисляет компоненты платформы Taimen, показывает, как они раскладываются по профилям корневого compose.yml, и фиксирует статус каждого профиля: что входит в набор по умолчанию, что экспериментально, что заморожено. Она нужна при планировании стенда и при выборе, какие профили включать.

Устройство репозитория

Платформа собирается в суперпроекте — репозитории-зонтике, к которому компоненты подключены git-сабмодулями плоско в корне:

<суперпроект>/
├── control-plane/          # сабмодуль
├── iam-service/            # сабмодуль
├── memory-service/         # сабмодуль
├── platform-auth-sdk/      # сабмодуль (библиотека)
├── skill-sdk/              # сабмодуль (библиотека)
├── platform-llm/           # сабмодуль (библиотека)
├── policy-service/         # сабмодуль (experimental)
├── entitlement-service/    # сабмодуль (заморожен)
├── platform-core/          # сабмодуль (заморожен)
├── platform-web/           # сабмодуль (заморожен)
├── compose.yml  .env.example  Makefile
├── deploy/                 # bootstrap.py, Caddyfile, конфигурация стендов и runner-хоста
├── packages/               # пакеты каталога Control Plane (YAML)
├── integrations/           # коннекторы и скиллы (запускаются агентами fleet)
├── demos/                  # демо, не входят в поставку компонентов
├── tools/                  # smoke, fill_secrets, cp_packages, …
└── docs/                   # архитектура и ADR

Плоская раскладка обязательна

control-plane, memory-service и другие сервисы подключают platform-auth-sdk path-зависимостью соседней папкой (../platform-auth-sdk), поэтому их образы собираются с контекстом — корнем суперпроекта. Переносить сабмодули в подкаталоги нельзя: сборка сломается.

Изменение в компоненте коммитится в его репозитории, а указатель сабмодуля в суперпроекте обновляется отдельным коммитом. make submodules поднимает сабмодули на закреплённых ревизиях, make status показывает указатели.

Компоненты

Сервисы ядра

Компонент Что делает Процессы в compose Хранилище
control-plane Авторитетное операционное состояние: задачи, типы, claims, runs, approvals, артефакты, цели, журнал событий, харнесс-протокол; CLI control-plane, MCP-сервер control-plane-mcp, демон исполнителя control-plane-agent control-plane-api, control-plane-worker, context-adapter (один образ) PostgreSQL 16 (control-plane-db)
iam-service Tenants, principals, audiences, PAT, service accounts, федерация внешних IdP, SCIM, выпуск RS256-токенов, JWKS iam-service PostgreSQL 16 (iam-db)
memory-service Граф знаний с временными фактами и provenance, документы, гибридный поиск (векторный + лексический + графовый), Context Compiler; HTTP API, MCP-сервер, CLI memory-service PostgreSQL 16 с Apache AGE и pgvector (memory-db, свой образ)

Библиотеки

Компонент Назначение
platform-auth-sdk Общий Policy Enforcement Point: проверка токенов IAM по JWKS, trusted auth context, отзыв, проверки entitlement и policy, единый контракт отказа, аудит. Используют все resource services
skill-sdk Скилл пишется один раз в коде; SDK даёт контракт, контекст вызова, хостинг по протоколам local, http, mcp и экспорт YAML в пакет каталога
platform-llm Общий LLM-клиент: любой OpenAI-совместимый /chat/completions, ответы по JSON-схеме, ретраи и переключение моделей
control-plane-client Клиент Control Plane (дистрибутив в control-plane/client): обмен PAT на токен, ретраи, типизированные вызовы. См. Клиенты сервисов

Периферия

Компонент Что делает Статус
policy-service Policy Decision Point над OpenFGA: роли, bindings, делегации, решения check/list_objects, проекция журналов Control Plane и IAM experimental
entitlement-service Лицензирование: продукты, фичи, планы, гранты, места, квоты с reserve → consume/release заморожен
platform-core (platform-api) Шлюз для панели: tenants/organizations/users, документы в S3/MinIO, feature flags, federation в IAM заморожен
platform-web Веб-консоль (Next.js): модуль Control Plane, вход через Keycloak заморожен
human-harness Рабочая поверхность человека — набор плагинов к DeepSeek Harness (отдельный репозиторий, в compose не входит) развивается, см. Human Harness

Что значит «заморожен» и «experimental»

Заморожен — компонент работает и получает исправления ошибок и безопасности, но новых функций в нём не делается. Experimental — поставляется опциональным профилем, в набор по умолчанию не входит, его дальнейшая судьба не решена; не стройте на нём критичные процессы. Обоснование — TAI-ADR-0034, TAI-ADR-0039, TAI-ADR-0040.

Профили compose

Корневой compose.yml — один файл, одна сеть (${TAIMEN_NETWORK}), одинаковые DNS-имена сервисов локально и на промышленном стенде. Набор сервисов выбирается профилями.

flowchart LR
    subgraph default["по умолчанию: make up"]
        core[core]
        edge[edge]
    end
    subgraph opt["опционально"]
        platform[platform<br/>заморожен]
        entitlement[entitlement<br/>заморожен]
        policy[policy<br/>experimental]
        demo[demo]
    end
    core --> edge
    platform -.-> core
    policy -.-> core
    demo -.-> core
Профиль Сервисы Статус Когда включать
core iam-db, iam-service, control-plane-db, control-plane-api, control-plane-worker, context-adapter, memory-db, memory-service стабильное ядро всегда
edge caddy стабильный всегда, кроме случаев, когда периметр обеспечен иначе
platform platform-db, platform-redis, realm-render, keycloak, minio, minio-bootstrap, platform-migrations, platform-api, platform-web заморожен нужна веб-консоль и вход людей через Keycloak
entitlement entitlement-db, entitlement-service заморожен нужно лицензирование; включается вместе с CP_ENTITLEMENT_ENABLED=true
policy policy-db, openfga-migrate, openfga, policy-service, policy-worker experimental проверка ReBAC-авторизации (CP_AUTHZ_MODE=shadow или policy), видимость памяти по principal
demo support-bot демо демонстрация чат-бота первой линии на памяти и Control Plane
fleet fleet-controller ядро агентов агенты описываются видом Agent и запускаются на узлах fleet — кодовые исполнители и источник наблюдений git-connector (сдвиги веток, реестр ADR, прогоны CI); см. Узлы и fleet

Команды:

make up                                     # core edge (по умолчанию)
make up PROFILES="core platform edge"       # с панелью платформы
make up PROFILES="core policy edge"         # с PDP
docker compose --profile core --profile edge up -d   # то же без make

make down останавливает все профили (--profile "*"), данные в volumes сохраняются.

Интерполяция идёт по всему файлу

Docker Compose подставляет переменные во весь compose.yml, а не только в сервисы включённых профилей. Поэтому обязательными (${VAR:?…}) объявлены только значения, которые генерирует make secrets. Идентификаторы опциональных профилей (IAM_TENANT_ID, SUPPORT_BOT_PAT, SUPPORT_WORKSPACE_ID) по умолчанию пусты и проверяются сервисами своих профилей, так что make up для core edge работает на чистом .env — см. Установку и первый запуск.

Образы и сборка

Образ Контекст сборки Dockerfile
${IMAGE_PREFIX}/control-plane корень суперпроекта (CP_BUILD_CONTEXT) control-plane/Dockerfile
${IMAGE_PREFIX}/iam-service ./iam-service (IAM_BUILD_CONTEXT) iam-service/Dockerfile
${IMAGE_PREFIX}/memory-service корень (MEMORY_BUILD_CONTEXT) memory-service/Dockerfile
${IMAGE_PREFIX}/memory-db memory-service/infra/memory-db PostgreSQL + AGE + pgvector
${IMAGE_PREFIX}/policy-service корень policy-service/Dockerfile
${IMAGE_PREFIX}/entitlement-service корень entitlement-service/Dockerfile
${IMAGE_PREFIX}/platform-api, platform-migrations ./platform-core apps/api/Dockerfile, workers/migrations/Dockerfile
${IMAGE_PREFIX}/platform-web ./platform-web Dockerfile (с build-args NEXT_PUBLIC_*)

IMAGE_PREFIX по умолчанию taimen, IMAGE_TAG — local. Контейнеры сервисов на Python работают под непривилегированным пользователем (у Control Plane и IAM — uid 10001), поэтому файлы секретов, которые монтируются в контейнер, на Linux должны принадлежать этому uid.

Volumes

Имена volumes задаются явно, чтобы промышленный стенд мог указать уже существующие: VOLUME_CONTROL_PLANE_DB, VOLUME_IAM_DB, VOLUME_MEMORY_DB, VOLUME_PLATFORM_DB и т.д. По умолчанию имя — ${COMPOSE_PROJECT_NAME}_<volume>, например taimen_control_plane_db. Список — в Переменных окружения, резервное копирование — в Резервном копировании.

Что не входит в compose

  • Runner (control-plane-agent) — демон автономного исполнителя ставится на отдельный хост как systemd-юниты. См. Агенты и runner.
  • MCP-сервер и CLI Control Plane — ставятся на машину оператора (uv tool install). См. CLI и MCP-сервер.
  • Human Harness — ставится у человека поверх DeepSeek Harness.
  • LLM-провайдер — внешний OpenAI-совместимый endpoint; память может работать без него на офлайн-заглушках.

См. также