Тема
MCP: Docker-compose standalone
Инструкция для установки, развёрнутой по Docker-compose standalone: Postgres, Redis и хранилище MinIO работают на той же машине, что и Эсборд.
В этом варианте MCP-сервер поднимается на отдельной машине со своими Redis и Postgres: обращаться к базам Эсборд ему не нужно, у него своя маленькая нагрузка. А вот хранилище изображений общее: картинки на досках лежат в MinIO Эсборд, и без доступа к нему скриншоты досок будут приходить с серыми прямоугольниками вместо изображений.
Дальше в примерах:
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
MINIO_BIND_IP=10.0.0.10 # на каком интерфейсе отдавать хранилище изображенийЗачем нужны BIND_IP
По умолчанию служебный порт и хранилище слушают только 127.0.0.1, то есть доступны лишь самой машине Эсборд. MCP-машине этого мало. Указав в MCP_GATEWAY_BIND_IP и MINIO_BIND_IP внутренний адрес машины Эсборд (в примере 10.0.0.10), вы делаете порты доступными по локальной сети, но не в интернете: публичными остаются только 80 и 443.
Если на машине несколько сетевых интерфейсов, укажите тот адрес, который видит MCP-машина.
- Задайте ключи шифрования токенов доступа агентов:
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и9000доступны с MCP-машины и закрыты для всех остальных адресов средствами вашего межсетевого экрана.
Шаг 2. Установка MCP-сервера
- Создайте на MCP-машине папку приложения:
shell
mkdir "/board-mcp"- Создайте в новой папке файл
docker-compose.yml:
shell
nano docker-compose.yml- Добавьте в
docker-compose.ymlследующее:
yml
version: "3.3"
services:
redis:
image: "${DOCKER_REGISTRY}/redis:${DOCKER_IMAGE_TAG}"
restart: "always"
postgres:
image: "${DOCKER_REGISTRY}/postgres:${DOCKER_IMAGE_TAG}"
restart: "always"
environment:
PGDATA: /data
volumes:
- pg_data:/data
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"
REDIS_PORT: "6379"
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}"
depends_on:
- redis
- postgres
volumes:
pg_data:Публикация порта 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 # домен вашей установки Эсборд
REDIS_PASS=pass # пароль redis из этого же docker-compose
POSTGRES_URL=postgresql://postgres:example@postgres:5432/sboard # база из этого же docker-compose
S3_ENDPOINT=10.0.0.10:9000 # хранилище Эсборд: адрес машины Эсборд и порт MinIO
S3_BUCKET=sboard-whiteboard # название бакета, как в установке Эсборд
S3_ACCESS_KEY_ID=access_key_id # ключ доступа к хранилищу, как в установке Эсборд
S3_SECRET_ACCESS_KEY=secret_access_key # секрет доступа к хранилищу, как в установке ЭсбордПро хранилище и скриншоты
S3_* здесь это те же значения, что у вашей установки Эсборд: 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 и проверьте установку по общей инструкции.