How-to: подключить внешнего участника (wss)¶
Для участника вне нашей машины (чужой API, другой стек). Модель и обоснование — доступ участников.
Сырой порт 4222 наружу не выставляется. Внешние ходят по
wssчерез Traefik.
1. Контракт¶
PR в contracts/: какие subject'ы участник публикует/потребляет
(изменить контракт).
2. Креды + права¶
- Сгенерируй пароль, положи в Infisical как
NATS_EXT_<УЧАСТНИК>_PASSWORD(секреты). - Добавь юзера с allow-list ровно на его subject'ы в
stacks/bus/nats/nats-server.conf:Это «контракт как ворота» в рантайме — физически только заявленное.{ user: "ext-<участник>", password: $NATS_EXT_<УЧАСТНИК>_PASSWORD, permissions: { publish: { allow: ["<его.subjects.>"] }, subscribe: { allow: ["_INBOX.>"] } } }
3. Эндпойнт¶
Домен на сервис nats, порт 8080 (ws) — задаётся в UI Coolify, Traefik
терминирует TLS. Внешний клиент подключается на wss://<домен>.
4. Передай участнику¶
- URL:
wss://nats.<домен> - креды:
user=ext-<участник>, пароль (из Infisical) - список разрешённых subject'ов (= его часть контракта)
- требование соблюдать контракт участника:
traceparent, идемпотентность, durable-консьюмер с именем<участник>-<назначение>.
5. Проверка¶
Реальный ws-клиент подключается, получает INFO (auth_required: true),
публикует/читает только разрешённое. Отрази в каталоге.
Удаление¶
Убрать юзера из конфига → отозвать креды → PR в контракты → удалить осиротевшие консьюмеры.