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

7.7 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. Для Open WebUI применяется его OpenAPI-интерфейс.

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

Узлы pve, kybinka и pve1 — независимые Proxmox-серверы. Для каждого узла требуется отдельный контейнер MCP с отдельным портом.


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

Токен создаётся отдельно на каждом узле.

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

Повтори для kybinka и pve1. В конфигурацию нужно подставить секрет токена соответствующего узла.


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

Файлы конфигурации должны находиться в следующих каталогах:

/mnt/ssd/apps/mcp/pve/config.json
/mnt/ssd/apps/mcp/kybinka/config.json
/mnt/ssd/apps/mcp/pve1/config.json

Если каталоги ещё не созданы, выполни на TrueNAS через SSH или Shell:

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

В каждом файле должен быть секрет API-токена именно соответствующего Proxmox-узла. Не оставляй текст СЮДА_СЕКРЕТ_ТОКЕНА_* в рабочем конфиге.

Конфигурация узла pve

Создай файл /mnt/ssd/apps/mcp/pve/config.json:

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": "openwebui-token",
    "token_value": "СЮДА_СЕКРЕТ_ТОКЕНА_PVE"
  },
  "logging": {
    "level": "INFO"
  }
}
EOF

Конфигурация узла kybinka

Создай файл /mnt/ssd/apps/mcp/kybinka/config.json:

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

Конфигурация узла pve1

Создай файл /mnt/ssd/apps/mcp/pve1/config.json:

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

Проверь корректность всех JSON-файлов до запуска контейнеров:

python3 -m json.tool /mnt/ssd/apps/mcp/pve/config.json
python3 -m json.tool /mnt/ssd/apps/mcp/kybinka/config.json
python3 -m json.tool /mnt/ssd/apps/mcp/pve1/config.json

Если ошибок нет, команды выведут отформатированное содержимое JSON. При необходимости ограничь права доступа к файлам с токенами:

chmod 600 /mnt/ssd/apps/mcp/{pve,kybinka,pve1}/config.json

verify_ssl: false отключает проверку TLS-сертификата Proxmox. Это обычно требуется для самоподписанного сертификата в локальной сети. Для production лучше установить доверенный сертификат и включить проверку.


Шаг 3. Запустить три контейнера через Dockge

В Dockge создай один Stack с именем proxmox-mcp.

  1. Открой Dockge.

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

  3. Укажи имя proxmox-mcp.

  4. Укажи рабочую директорию стека:

    /mnt/ssd/apps/mcp

  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. Замени значения ключ-для-* на свои ключи.
  2. Нажми Save, затем Deploy / Up / Start.

В результате должны запуститься контейнеры proxmox-mcp-pve, proxmox-mcp-kybinka и proxmox-mcp-pve1 на портах 8811, 8812 и 8813 соответственно.


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

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

Авторизованный запрос:

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

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

В Open WebUI добавь три OpenAPI Tool Server:

  • http://192.168.31.100:8811/openapi.jsonProxmox pve;
  • http://192.168.31.100:8812/openapi.jsonProxmox kybinka;
  • http://192.168.31.100:8813/openapi.jsonProxmox pve1.

Для каждого сервера укажи свой Bearer-ключ из PROXMOX_API_KEY в compose-конфигурации Dockge.


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

Симптом Причина
Контейнер падает при старте Невалидный JSON или неверный путь к config.json
401 Unauthorized Bearer-ключ не совпадает с PROXMOX_API_KEY
Инструмент не появляется в Open WebUI Проверь URL /openapi.json и доступность соответствующего порта
Модель не видит VM Проверь права API-токена Proxmox и логи контейнера в Dockge