Skip to content

MCP: Docker-compose HA ​

Инструкция для установки, развёрнутой по Docker-compose HA: Postgres, Redis и хранилище S3 вынесены во внешние сервисы.

В этом варианте MCP-сервер своих баз не поднимает: он подключается к тем же внешним сервисам, что и Эсборд. Отдельный контейнер нужен только один, сам board-mcp.

Дальше в примерах:

  • 10.0.0.10 это внутренний адрес машины Эсборд;
  • 10.0.0.20 это внутренний адрес MCP-машины;
  • sboard.mycompany.com это домен вашей установки.

Шаг 1. Настройка машины Эсборд ​

  1. В файле .env рядом с docker-compose.yml Эсборд добавьте переменные:
shell
BOARD_MCP_HOST=10.0.0.20      # внутренний адрес MCP-машины: туда nginx передаёт запросы агентов
MCP_GATEWAY_PORT=9443         # служебный порт, можно оставить как есть
MCP_GATEWAY_BIND_IP=10.0.0.10 # на каком интерфейсе машины Эсборд слушать служебный порт
BOARD_MCP_PORT=3100           # порт входа MCP-сервера, менять только вместе с публикацией на шаге 2

Зачем нужен BIND_IP

По умолчанию служебный порт слушает только 127.0.0.1, то есть доступен лишь самой машине Эсборд. MCP-машине этого мало. Указав внутренний адрес машины Эсборд (в примере 10.0.0.10), вы делаете порт доступным по локальной сети, но не в интернете: публичными остаются только 80 и 443.

Если на машине несколько сетевых интерфейсов, укажите тот адрес, который видит MCP-машина.

Переменная MINIO_BIND_IP в этом варианте не нужна: хранилище у вас внешнее, MCP-сервер обратится к нему напрямую по S3_ENDPOINT, как и остальные сервисы Эсборд.

  1. Задайте ключи шифрования токенов доступа агентов:
shell
CRYPTO_PASSWORD=Kh3pWq8ZtR2mBvNs      # секрет установки, произвольная строка
CRYPTO_IV_16_BYTE=A7fQ2xLpR9dM4kTz    # вектор инициализации, ровно 16 символов

Задайте до первого выпуска токенов

Токен ищется в базе по зашифрованному значению, поэтому смена этих ключей обесценивает все ранее выданные токены: агенты перестанут подключаться, и сотрудникам придётся выпускать токены заново.

Если переменные не заданы, используются значения по умолчанию, одинаковые во всех установках Эсборд. Работать будет, но любой, кто получит копию вашей базы, сможет расшифровать токены.

  1. При необходимости ограничьте число вызовов MCP на сотрудника в сутки:
shell
MCP_DAILY_LIMIT=500   # пусто или 0 означает без ограничения
  1. Пересоздайте контейнер Эсборд, чтобы переменные применились:
shell
docker-compose -f docker-compose.yml up -d --force-recreate
  1. Убедитесь, что порт 9443 доступен с MCP-машины и закрыт для всех остальных адресов средствами вашего межсетевого экрана. Также проверьте, что MCP-машине разрешён доступ к внешним Postgres, Redis и S3: у них обычно свои списки разрешённых адресов.

Шаг 2. Установка MCP-сервера ​

  1. Создайте на MCP-машине папку приложения:
shell
mkdir "/board-mcp"
  1. Создайте в новой папке файл docker-compose.yml:
shell
nano docker-compose.yml
  1. Добавьте в docker-compose.yml следующее:
yml
version: "3.3"
services:
  board-mcp:
    image: "${DOCKER_REGISTRY}/mcp-agent:${DOCKER_IMAGE_TAG}"
    restart: "always"
    ports:
      - 10.0.0.20:3100:3000
    environment:
      GRPC_BOARDS_MCP_SERVICE_URL: "${BOX_HOST}:${MCP_GATEWAY_PORT}"
      GRPC_EVENTS_SERVICE_URL: "${BOX_HOST}:${MCP_GATEWAY_PORT}"
      GRPC_LIMITS_SERVICE_URL: "${BOX_HOST}:${MCP_GATEWAY_PORT}"
      GRPC_APPS_SERVICE_URL: "${BOX_HOST}:${MCP_GATEWAY_PORT}"
      GRPC_JOURNAL_SERVICE_URL: "${BOX_HOST}:${MCP_GATEWAY_PORT}"
      WHITEBOARD_API_UPLOAD_STREAM_URL: "http://${BOX_HOST}:${MCP_GATEWAY_PORT}/api/boards/v1/boardUpload/mcp-stream"
      MCP_RESOURCE_URL: "https://${DOMAIN_NAME}/board-mcp"
      MCP_PUBLIC_BASE_URL: "https://${DOMAIN_NAME}"
      OAUTH_ISSUER_URL: "https://${DOMAIN_NAME}/api"
      REDIS_HOST: "${REDIS_HOST}"
      REDIS_PORT: "${REDIS_PORT}"
      REDIS_PASS: "${REDIS_PASS}"
      POSTGRES_URL: "${POSTGRES_URL}"
      ENDPOINT: "${S3_ENDPOINT}"
      BUCKET: "${S3_BUCKET}"
      ACCESS_KEY_ID: "${S3_ACCESS_KEY_ID}"
      SECRET_ACCESS_KEY: "${S3_SECRET_ACCESS_KEY}"

Публикация порта 3100

Порт публикуется на внутренний адрес MCP-машины (10.0.0.20), потому что к нему обращается nginx Эсборд. В интернет этот порт выставлять не нужно: сотрудники работают через домен Эсборд.

  1. Создайте файл .env в папке с docker-compose.yml и укажите в нём переменные окружения. Пример:
shell
DOCKER_REGISTRY=cr.yandex/crpqnc9iiqap7fs19jhl
DOCKER_IMAGE_TAG=2026.3.1 # та же версия, что у вашей установки Эсборд

BOX_HOST=10.0.0.10 # внутренний адрес машины Эсборд
MCP_GATEWAY_PORT=9443 # служебный порт Эсборд, тот же, что задали на шаге 1
DOMAIN_NAME=sboard.mycompany.com # домен вашей установки Эсборд

# внешние сервисы: те же значения, что в .env вашей установки Эсборд
REDIS_HOST=redis.mycompany.com
REDIS_PORT=6379
REDIS_PASS=pass
POSTGRES_URL=postgresql://user:password@host:5432/db
S3_ENDPOINT=https://storage.s3.com
S3_BUCKET=example-bucket
S3_ACCESS_KEY_ID=access_key_id
S3_SECRET_ACCESS_KEY=secret_access_key

Про общие сервисы

S3_* обязаны совпадать с установкой Эсборд: MCP-сервер читает те же файлы изображений, иначе на скриншотах досок появятся серые прямоугольники вместо картинок.

REDIS_* это очередь отрисовки. Для неё можно использовать как общий Redis Эсборд, так и отдельный, если не хотите смешивать нагрузку.

POSTGRES_URL не обязателен: он нужен только для наклеек «ИИшка» и настроек MCP по отдельным доскам. Если указываете, используйте ту же базу, что и Эсборд: MCP-сервер создаст в ней две свои таблицы при первом запуске.

  1. Авторизуйтесь в Docker registry (запросите ключ авторизации key.json у вашего менеджера)
shell
cat key.json | docker login \
--username json_key \
--password-stdin \
cr.yandex
  1. Подтяните образы с Docker registry
shell
docker-compose -f docker-compose.yml pull
  1. Запустите docker-compose
shell
docker-compose -f docker-compose.yml up -d

Шаг 3. Лицензия и проверка ​

Загрузите лицензию MCP и проверьте установку по общей инструкции.