Files
proxmox-mcp-setup/proxmox-mcp-open-webui-setup.md
T

10 KiB
Raw Blame History

Установка Proxmox MCP-сервера и подключение к Open WebUI

Инструкция под твою инфраструктуру: pve (192.168.31.2), kybinka (192.168.1.10), pve1 (192.168.31.4), TrueNAS (192.168.31.100, там же крутится Open WebUI).

Используем проект ProxmoxMCP-Plus — он умеет работать сразу в двух режимах:

  • родной MCP (для Claude Desktop, Cursor и т.д.)
  • OpenAPI-мост — именно он нужен для Open WebUI, потому что Open WebUI не умеет подключаться к MCP напрямую, а понимает только обычный HTTP/OpenAPI.

⚠️ Важный момент про архитектуру

Твои три Proxmox-узла (pve, kybinka, pve1) — это не один кластер, а три независимых сервера в разных подсетях. Один MCP-контейнер умеет говорить только с одним Proxmox API за раз. Значит, чтобы управлять всеми тремя из чата, нужно поднять три отдельных контейнера (по одному на узел), каждый на своём порту, и подключить их к Open WebUI как три отдельных инструмента.

TrueNAS отдельно — это не Proxmox, и ProxmoxMCP-Plus с ним не работает. Управлять TrueNAS через тот же чат — отдельная задача (нужен другой MCP-сервер, для TrueNAS API). Ниже — только про Proxmox-узлы, но покажу, где ты потом можешь добавить TrueNAS-инструмент рядом.

Разворачивать контейнеры удобнее всего на TrueNAS — там уже крутится Open WebUI, сервер работает постоянно, и можно поднимать Docker-контейнеры через встроенный интерфейс Apps.


Шаг 1. Создать API-токен на каждом Proxmox-узле

Токен создаётся отдельно на каждом из трёх узлов (pve, kybinka, pve1), заходишь в веб-интерфейс каждого по отдельности.

  1. Открой веб-интерфейс узла, например https://192.168.31.2:8006.
  2. Слева: Datacenter → Permissions → API Tokens.
  3. Нажми Add:
    • User: root@pam (для учёбы ок, в проде лучше завести отдельного пользователя с ограниченными правами)
    • Token ID: mcp-token
    • сними галку "Privilege Separation" (иначе токену нужно отдельно назначать права)
  4. Нажми Add, скопируй Token ID и Secret — секрет показывается один раз, сохрани его сразу в текстовый файл.

Повтори для kybinka и pve1. В итоге у тебя будет 3 пары user@realm!token-name + secret.


Шаг 2. Подготовить конфиги на TrueNAS

Зайди на TrueNAS по SSH (или через Shell в веб-интерфейсе), создай папку для конфигов:

mkdir -p /mnt/ssd/apps/mcp/{pve,kybinka,pve1}

(используется пул ssd; если у тебя он смонтирован по другому пути или ты хочешь другой пул — замени /mnt/ssd на свой).

Создай конфиг для узла pve:

cat > /mnt/ssd/apps/mcp/pve/config.json << 'EOF'
{
  "proxmox": {
    "host": "192.168.31.2",
    "port": 8006,
    "verify_ssl": false
  },
  "auth": {
    "user": "root@pam",
    "token_name": "mcp-token",
    "token_value": "СЮДА_СЕКРЕТ_ТОКЕНА_PVE"
  }
}
EOF

Аналогично создай config.json в папках kybinka (host 192.168.1.10) и pve1 (host 192.168.31.4), с соответствующими токенами.

verify_ssl: false — потому что у Proxmox самоподписанный сертификат по умолчанию. Для учебного стенда это нормально.


Шаг 3. Запустить три контейнера (по одному на узел)

Проще всего — через docker-compose прямо в шелле TrueNAS (TrueNAS 25.10 поддерживает Docker нативно).

Создай файл docker-compose.yml:

cat > /mnt/ssd/apps/mcp/docker-compose.yml << 'EOF'
services:
  proxmox-mcp-pve:
    image: ghcr.io/rekklesna/proxmoxmcp-plus:latest
    container_name: proxmox-mcp-pve
    restart: unless-stopped
    ports:
      - "8811:8811"
    environment:
      - PROXMOX_API_KEY=ключ-для-pve-придумай-любой-длинный
    volumes:
      - /mnt/ssd/apps/mcp/pve/config.json:/app/proxmox-config/config.json:ro

  proxmox-mcp-kybinka:
    image: ghcr.io/rekklesna/proxmoxmcp-plus:latest
    container_name: proxmox-mcp-kybinka
    restart: unless-stopped
    ports:
      - "8812:8811"
    environment:
      - PROXMOX_API_KEY=ключ-для-kybinka-придумай-любой-длинный
    volumes:
      - /mnt/ssd/apps/mcp/kybinka/config.json:/app/proxmox-config/config.json:ro

  proxmox-mcp-pve1:
    image: ghcr.io/rekklesna/proxmoxmcp-plus:latest
    container_name: proxmox-mcp-pve1
    restart: unless-stopped
    ports:
      - "8813:8811"
    environment:
      - PROXMOX_API_KEY=ключ-для-pve1-придумай-любой-длинный
    volumes:
      - /mnt/ssd/apps/mcp/pve1/config.json:/app/proxmox-config/config.json:ro
EOF

Замени ключ-для-* на свои сгенерированные ключи, например так:

openssl rand -hex 32

Выполни для каждого сервиса свой ключ, вставь в файл. Запусти всё:

cd /mnt/ssd/apps/mcp
docker compose up -d

Шаг 4. Проверить, что контейнеры работают

curl -f http://localhost:8811/livez   # pve
curl -f http://localhost:8812/livez   # kybinka
curl -f http://localhost:8813/livez   # pve1

Каждый должен ответить 200 OK. Дальше проверь авторизованный доступ (подставь свой ключ и порт):

curl -H "Authorization: Bearer ключ-для-pve" http://localhost:8811/health

Если видишь {"status":"ok"} (или похожее) — контейнер видит Proxmox API.


Шаг 5. Подключить к Open WebUI

Раз Open WebUI и MCP-контейнеры теперь на одной машине (TrueNAS), обращаться можно либо по localhost, либо по IP TrueNAS — зависит от того, в одной ли они Docker-сети. Проще всего указывать IP: 192.168.31.100.

  1. Зайди в Open WebUI → Settings (шестерёнка) → Admin Settings → Tools (в некоторых версиях — Workspace → Tools, а сами инструменты подключаются как "OpenAPI Tool Server").
  2. Нажми Add Tool Server (или "+"):
    • URL: http://192.168.31.100:8811/openapi.json
    • Auth: Bearer, вставь ключ ключ-для-pve
    • Имя — например Proxmox pve
  3. Повтори для kybinka (http://192.168.31.100:8812/openapi.json) и pve1 (http://192.168.31.100:8813/openapi.json), каждый со своим ключом и понятным именем.
  4. Сохрани. В списке моделей/чата должна появиться возможность включить эти инструменты (обычно — иконка инструментов рядом с полем ввода сообщения, там выбираешь, какие серверы разрешить в конкретном чате).

Шаг 6. Проверка в чате

Открой новый чат в Open WebUI, включи инструмент Proxmox pve, и напиши что-то вроде:

Покажи список нод и виртуальных машин на pve

Если всё настроено верно, модель вызовет get_nodes / get_vms и покажет актуальные данные (например, VM haos-16.1 и LXC mariadb, Panel — как в твоей инвентаризации).


Частые проблемы

Симптом Причина
Инструмент не появляется в Open WebUI Проверь, что URL заканчивается на /openapi.json, а не просто на /docs
401 Unauthorized Ключ Bearer в Open WebUI не совпадает с PROXMOX_API_KEY в docker-compose
Контейнер падает при старте Опечатка в config.json (проверь docker compose logs proxmox-mcp-pve)
Модель "не видит" VM Токен Proxmox создан с "Privilege Separation" — права токена ограничены, пересоздай без этой галки или явно выдай права в Datacenter → Permissions

Что дальше

  • Если захочешь и изменять серверы (создавать/удалять VM), а не только смотреть — это уже доступно из коробки, но советую сначала потренироваться на pve1 (он у тебя простаивает и ничего важного там нет).
  • Для управления TrueNAS из того же чата понадобится отдельный MCP/OpenAPI-сервер под TrueNAS API — если нужно, могу подобрать и расписать так же подробно.