Тема
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. Настройка машины Эсборд
- В файле
.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, как и остальные сервисы Эсборд.
- Задайте ключи шифрования токенов доступа агентов:
shell
CRYPTO_PASSWORD=Kh3pWq8ZtR2mBvNs # секрет установки, произвольная строка
CRYPTO_IV_16_BYTE=A7fQ2xLpR9dM4kTz # вектор инициализации, ровно 16 символовЗадайте до первого выпуска токенов
Токен ищется в базе по зашифрованному значению, поэтому смена этих ключей обесценивает все ранее выданные токены: агенты перестанут подключаться, и сотрудникам придётся выпускать токены заново.
Если переменные не заданы, используются значения по умолчанию, одинаковые во всех установках Эсборд. Работать будет, но любой, кто получит копию вашей базы, сможет расшифровать токены.
- При необходимости ограничьте число вызовов MCP на сотрудника в сутки:
shell
MCP_DAILY_LIMIT=500 # пусто или 0 означает без ограничения- Пересоздайте контейнер Эсборд, чтобы переменные применились:
shell
docker-compose -f docker-compose.yml up -d --force-recreate- Убедитесь, что порт
9443доступен с MCP-машины и закрыт для всех остальных адресов средствами вашего межсетевого экрана. Также проверьте, что MCP-машине разрешён доступ к внешним Postgres, Redis и S3: у них обычно свои списки разрешённых адресов.
Шаг 2. Установка MCP-сервера
- Создайте на MCP-машине папку приложения:
shell
mkdir "/board-mcp"- Создайте в новой папке файл
docker-compose.yml:
shell
nano docker-compose.yml- Добавьте в
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 Эсборд. В интернет этот порт выставлять не нужно: сотрудники работают через домен Эсборд.
- Создайте файл
.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-сервер создаст в ней две свои таблицы при первом запуске.
- Авторизуйтесь в Docker registry (запросите ключ авторизации
key.jsonу вашего менеджера)
shell
cat key.json | docker login \
--username json_key \
--password-stdin \
cr.yandex- Подтяните образы с Docker registry
shell
docker-compose -f docker-compose.yml pull- Запустите docker-compose
shell
docker-compose -f docker-compose.yml up -dШаг 3. Лицензия и проверка
Загрузите лицензию MCP и проверьте установку по общей инструкции.