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

12 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-контейнеры через Dockge.


Шаг 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. Запустить три контейнера через Dockge

Вместо запуска через Shell создай один Stack (стек) в веб-интерфейсе Dockge. Все три контейнера будут управляться из одного стека.

  1. Открой Dockge в браузере.

  2. Нажми Create Stack (или +).

  3. Введи имя стека, например proxmox-mcp.

  4. В качестве рабочей директории стека укажи:

    /mnt/ssd/apps/mcp

    Если Dockge уже использует собственную корневую директорию для стеков, выбери или создай каталог, соответствующий этому пути. Важно, чтобы каталоги pve, kybinka и pve1 с файлами config.json находились внутри рабочей директории стека.

  5. В редакторе compose-файла вставь следующий конфиг:

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
  1. Замени значения ключ-для-* на собственные длинные ключи. Ключи можно сгенерировать заранее командой:
openssl rand -hex 32

Команду можно выполнить на любом компьютере, где установлен OpenSSL. Для каждого контейнера используй отдельный ключ. 7. Нажми Save. 8. Нажми Deploy / Up / Start — название кнопки зависит от версии Dockge.

После запуска в Dockge должны появиться три контейнера:

  • proxmox-mcp-pve — порт 8811;
  • proxmox-mcp-kybinka — порт 8812;
  • proxmox-mcp-pve1 — порт 8813.

Если Dockge не может найти config.json, проверь, что рабочая директория стека действительно /mnt/ssd/apps/mcp, а файлы находятся по адресам /mnt/ssd/apps/mcp/pve/config.json, /mnt/ssd/apps/mcp/kybinka/config.json и /mnt/ssd/apps/mcp/pve1/config.json.


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

Проверку можно выполнить через встроенный Terminal/Shell TrueNAS или другим компьютером в сети:

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

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

curl -H "Authorization: Bearer ключ-для-pve" http://192.168.31.100: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 в compose-файле Dockge
Контейнер падает при старте Опечатка в config.json (проверь логи контейнера в Dockge)
Модель "не видит" VM Токен Proxmox создан с "Privilege Separation" — права токена ограничены, пересоздай без этой галки или явно выдай права в Datacenter → Permissions

Что дальше

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