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

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 в контракты → удалить осиротевшие консьюмеры.