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

183 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Установка 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 в веб-интерфейсе), создай папку для конфигов:
```bash
mkdir -p /mnt/tank/apps-config/proxmox-mcp/{pve,kybinka,pve1}
```
(путь `/mnt/tank/...` подставь под свой реальный пул — у тебя есть `tank`, `ssd`, `backup`, `video`, подойдёт любой не занятый под VM-диски).
Создай конфиг для узла **pve**:
```bash
cat > /mnt/tank/apps-config/proxmox-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`:
```bash
cat > /mnt/tank/apps-config/proxmox-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/tank/apps-config/proxmox-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/tank/apps-config/proxmox-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/tank/apps-config/proxmox-mcp/pve1/config.json:/app/proxmox-config/config.json:ro
EOF
```
Замени `ключ-для-*` на свои сгенерированные ключи, например так:
```bash
openssl rand -hex 32
```
Выполни для каждого сервиса свой ключ, вставь в файл. Запусти всё:
```bash
cd /mnt/tank/apps-config/proxmox-mcp
docker compose up -d
```
---
## Шаг 4. Проверить, что контейнеры работают
```bash
curl -f http://localhost:8811/livez # pve
curl -f http://localhost:8812/livez # kybinka
curl -f http://localhost:8813/livez # pve1
```
Каждый должен ответить `200 OK`. Дальше проверь авторизованный доступ (подставь свой ключ и порт):
```bash
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 — если нужно, могу подобрать и расписать так же подробно.