docs(platform): align connector, EDP, and deploy canon
This commit is contained in:
@@ -202,7 +202,13 @@ TASKER_SYNC_SOURCE=1 ./infra/synology/deploy-current.sh
|
||||
|
||||
Если emergency-fix был сделан прямо на Synology в этих env-файлах, перенести sanitized-значение в `.env.synology.example`/docs, а секрет оставить только в live env.
|
||||
|
||||
### Gelios: сбор всех units доверенного подключения
|
||||
### Gelios: frozen legacy compatibility contour
|
||||
|
||||
`gelios-postgres` и `gelios-gateway` — уже существующий self-hosted контур с
|
||||
собственным persistent Timescale volume. Он остаётся полностью воспроизводимым
|
||||
в source/deploy, но не развивается и не используется как шаблон для новых
|
||||
провайдеров. Его удаление или миграция требуют отдельного подтверждённого плана;
|
||||
обычный Platform/EDP deploy не удаляет volume и не изменяет старый workflow.
|
||||
|
||||
`GELIOS_UNIT_SCOPE=all` означает **все текущие и будущие units только одной уже
|
||||
настроенной пары `GELIOS_TENANT_ID` + `GELIOS_CONNECTION_ID`**. Это не wildcard
|
||||
@@ -210,17 +216,71 @@ TASKER_SYNC_SOURCE=1 ./infra/synology/deploy-current.sh
|
||||
Пропавший из очередного ответа unit не удаляется: его stable provider ID и
|
||||
`last_seen_at` сохраняются; видимость на карте — отдельная логика витрины.
|
||||
|
||||
Перед каноническим `nodedc-deploy apply` включить политику на Synology (скрипт
|
||||
создаёт backup и не выводит секреты):
|
||||
Перед узким legacy apply включить политику на Synology (скрипт создаёт backup и
|
||||
не выводит секреты):
|
||||
|
||||
```bash
|
||||
sudo bash /volume1/docker/nodedc-deploy/inbox/prepare-gelios-all-units-env.sh
|
||||
```
|
||||
|
||||
Затем применить узкий Platform-артефакт, собранный с `--gateway-only`, через
|
||||
`nodedc-deploy`. В его plan должны быть только `gelios-postgres` и
|
||||
`gelios-gateway`; общий `docker-compose` в такой архив не входит. После apply
|
||||
Gateway начинает принимать весь состав units этого подключения.
|
||||
В plan такого Platform-артефакта должны быть только `gelios-postgres` и
|
||||
`gelios-gateway`; общий compose в узкий архив не входит.
|
||||
|
||||
## EDP publish grant: platform-owned credential
|
||||
|
||||
`NDC Data Product Writer API` — историческое имя native credential type для
|
||||
внутреннего scoped EDP publish grant. Это не Gelios access/refresh token и не
|
||||
право записи в Gelios.
|
||||
|
||||
Целевой путь полностью служебный: control plane NDC по разрешённому connection
|
||||
profile генерирует capability внутри native NDC L2 Credentials, передаёт EDP
|
||||
только digest для scoped binding и возвращает MCP только opaque compatible
|
||||
reference/status.
|
||||
Пользователь не читает, не копирует и не вводит этот внутренний секрет.
|
||||
|
||||
EDP уже имеет localhost-only digest-only managed endpoint. Managed endpoint и
|
||||
legacy plaintext provisioning имеют раздельные флаги и по умолчанию выключены.
|
||||
Runner-owned provisioner bearer относится только к legacy plaintext routes и
|
||||
на managed ensure/revoke намеренно не действует. Managed caller contract —
|
||||
Ed25519-signed Engine service request с exact audience, method, request target,
|
||||
raw-body SHA-256, timestamp и одноразовым nonce; EDP хранит только public key и
|
||||
fail-closed replay cache. Ни bearer, ни signing private key нельзя открывать
|
||||
workflow, MCP или переиспользовать как shared credential. В source-кандидате
|
||||
Engine добавлен отдельный server-derived plan/apply для exact пары
|
||||
`ndcDataProductWriterApi` + custom Publish node; он не расширяет generic HTTP
|
||||
safe-ref policy и не принимает provider/scope/credential identity, capability,
|
||||
generation или service URL от MCP. До отдельного Engine deploy и runtime proof
|
||||
текущий deployed MCP этого контракта не имеет. Поэтому отсутствие
|
||||
совместимого reference — платформенный runtime gap, а не действие пользователя.
|
||||
Ручной перенос capability из отдельно включаемого legacy endpoint через root/UI допустим только как аварийная
|
||||
диагностика self-hosted контура; он не является acceptance-путём и не должен
|
||||
закрепляться в пользовательской автоматизации.
|
||||
|
||||
Compose монтирует read-only trust directory
|
||||
`/volume1/docker/nodedc-platform/trust/engine-managed-provisioner` в EDP; в нём
|
||||
ожидается один regular, non-symlink файл `public-key.pem` с Ed25519 SPKI public
|
||||
key. Файл не должен быть group/world-writable и должен читаться runtime UID
|
||||
`11006`. Private key в этот каталог, Platform artifact, `.env` или EDP
|
||||
контейнер не попадает. Canonical deploy runner теперь атомарно создаёт или
|
||||
проверяет matching Ed25519 pair перед relevant Engine/EDP Compose apply: private
|
||||
key остаётся `root:root 0400`, public trust — `root:11006 0440`; public-only
|
||||
crash state, mismatch, symlink и неверный тип ключа отклоняются до запуска.
|
||||
`EXTERNAL_DATA_PLANE_MANAGED_PROVISIONING_ENABLED` остаётся `false` на staging.
|
||||
В отдельно подтверждённом activation window его переводят в `true`
|
||||
непосредственно перед Platform EDP artifact; runner принимает deploy только
|
||||
если `/healthz` явно вернул managed status `enabled`. Старый Engine в этот
|
||||
момент ещё не имеет signer mount, поэтому usable caller появляется лишь после
|
||||
следующего отдельно принятого Engine artifact.
|
||||
EDP application artifact пересобирает и force-recreate только
|
||||
`external-data-plane`. Уже работающий `external-data-plane-postgres` и его
|
||||
Timescale volume runner не выбирает и не перезапускает; healthy database —
|
||||
обязательная deploy prerequisite.
|
||||
Canonical service/key/audience заданы в `.env.synology.example`; wire headers и
|
||||
canonical signing payload описаны в `packages/external-provider-contract/README.md`.
|
||||
|
||||
До появления opaque compatible reference и успешного manual publish proof
|
||||
Schedule Trigger не включать. Frozen legacy workflow и его credentials этот
|
||||
процесс не изменяет.
|
||||
|
||||
## AI Hub relay-only deploy
|
||||
|
||||
|
||||
Reference in New Issue
Block a user