Компоненты
Soul Stack — это четыре исполняемых файла с разными ролями: два демона (Keeper и Soul) и два инструмента оператора (soulctl и soul-lint).
| Компонент | Роль |
|---|---|
| Keeper | Центральный сервер: реестры, рендер и доставка Destiny, RBAC, аудит. Stateless-кластер на общих PostgreSQL + Redis. Отдаёт встроенный операторский web-UI на /ui. |
| Soul | Агент на управляемом хосте: применяет Destiny, режимы pull (демон) и push (oneshot по SSH). |
| soulctl | Клиентский CLI оператора — тонкая обёртка над Operator API. |
| soul-lint | Офлайн-линтер Destiny / сценариев / сервисов / манифестов плагинов. |
Как они связаны
Заголовок раздела «Как они связаны»В центре — Keeper: один или несколько stateless-инстансов поверх общих PostgreSQL (холодное состояние) и Redis (presence, координация). Keeper держит реестры, рендерит Destiny и через долгоживущий gRPC-стрим поверх mTLS управляет душами.
На каждом управляемом хосте — Soul: агент, который сам инициирует соединение к Keeper-у (на хостах не нужно открывать входящие порты), получает отрендеренные задачи и применяет их через core-модули. Тот же исполняемый файл работает и в push-режиме (oneshot по SSH без постоянного демона).
Оператор работает через Operator API (HTTP/OpenAPI). Поверх него — soulctl: тонкий CLI для тех же эндпоинтов (регистрация хостов, запуск сценариев, просмотр инкарнаций), а также встроенный web-UI, который Keeper отдаёт на /ui из коробки (без отдельного деплоя). Перед применением конфигурации soul-lint статически валидирует Destiny, сценарии, сервисы и манифесты плагинов — на рабочей станции или в CI, ничего не исполняя.
flowchart TB
Op["операторы<br/>soulctl · OpenAPI / MCP"] --> K
K["Keeper<br/>Operator API · рендер · реестры<br/>RBAC · аудит · stateless-кластер"]
K --> PG[("PostgreSQL — состояние")]
K --> R[("Redis — presence, координация")]
S1["Soul"] -->|"gRPC bidi-stream поверх mTLS<br/>соединение инициирует Soul"| K
S2["Soul"] --> K
S3["Soul"] --> K
S4["Soul"] --> K
SL["soul-lint — офлайн, рядом с оператором: валидирует артефакты до применения"]
Подробно про каждый компонент — по ссылкам в таблице выше.