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

243 lines
9.0 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**. Для 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
Файлы конфигурации должны находиться в следующих каталогах:
```text
/mnt/ssd/apps/mcp/pve/config.json
/mnt/ssd/apps/mcp/kybinka/config.json
/mnt/ssd/apps/mcp/pve1/config.json
```
Если каталоги ещё не созданы, выполни на TrueNAS через SSH или Shell:
```bash
mkdir -p /mnt/ssd/apps/mcp/{pve,kybinka,pve1}
```
> В каждом файле должен быть секрет API-токена именно соответствующего Proxmox-узла. Не оставляй текст `СЮДА_СЕКРЕТ_ТОКЕНА_*` в рабочем конфиге.
### Конфигурация узла `pve`
Создай файл `/mnt/ssd/apps/mcp/pve/config.json`:
```bash
cat > /mnt/ssd/apps/mcp/pve/config.json << 'EOF'
{
"dev_mode": true,
"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`:
```bash
cat > /mnt/ssd/apps/mcp/kybinka/config.json << 'EOF'
{
"dev_mode": true,
"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`:
```bash
cat > /mnt/ssd/apps/mcp/pve1/config.json << 'EOF'
{
"dev_mode": true,
"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-файлов до запуска контейнеров:
```bash
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. При необходимости ограничь права доступа к файлам с токенами:
```bash
chmod 600 /mnt/ssd/apps/mcp/{pve,kybinka,pve1}/config.json
```
> `verify_ssl: false` отключает проверку TLS-сертификата Proxmox. Параметр `dev_mode: true` требуется текущей версией ProxmoxMCP-Plus, чтобы разрешить такое подключение с самоподписанным сертификатом. Для production лучше установить доверенный сертификат и использовать `verify_ssl: true` вместе с `dev_mode: false`.
---
## Шаг 3. Запустить три контейнера через Dockge
В Dockge создай один Stack с именем `proxmox-mcp`.
1. Открой Dockge.
2. Нажми **Create Stack** или **+**.
3. Укажи имя `proxmox-mcp`.
4. Укажи рабочую директорию стека:
`/mnt/ssd/apps/mcp`
5. Вставь в compose-редактор:
```yaml
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
```
6. Замени значения `ключ-для-*` на свои ключи.
7. Нажми **Save**, затем **Deploy** / **Up** / **Start**.
В результате должны запуститься контейнеры `proxmox-mcp-pve`, `proxmox-mcp-kybinka` и `proxmox-mcp-pve1` на портах `8811`, `8812` и `8813` соответственно.
---
## Шаг 4. Проверить, что контейнеры работают
```bash
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
```
Авторизованный запрос:
```bash
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.json``Proxmox pve`;
- `http://192.168.31.100:8812/openapi.json``Proxmox kybinka`;
- `http://192.168.31.100:8813/openapi.json``Proxmox pve1`.
Для каждого сервера укажи свой Bearer-ключ из `PROXMOX_API_KEY` в compose-конфигурации Dockge.
---
## Частые проблемы
| Симптом | Причина |
| --- | --- |
| `logging Field required` | В контейнер попал старый `config.json` без блока `logging` или подключён неправильный файл через volume |
| `Insecure TLS configuration blocked` | В конфигурации отсутствует `dev_mode: true` при использовании `verify_ssl: false` |
| `McpError: Connection closed` | MCP-сервер завершился из-за ошибки конфигурации; исправь первичную ошибку выше по логу |
| Контейнер падает при старте | Невалидный JSON или неверный путь к `config.json` |
| `401 Unauthorized` | Bearer-ключ не совпадает с `PROXMOX_API_KEY` |
| Инструмент не появляется в Open WebUI | Проверь URL `/openapi.json` и доступность соответствующего порта |
| Модель не видит VM | Проверь права API-токена Proxmox и логи контейнера в Dockge |
Если после изменения конфигурации остаётся ошибка `logging Field required`, останови Stack в Dockge, проверь файлы на TrueNAS и заново выполни **Deploy**. В compose должны использоваться именно эти volume-маунты:
```yaml
- /mnt/ssd/apps/mcp/pve/config.json:/app/proxmox-config/config.json:ro
- /mnt/ssd/apps/mcp/kybinka/config.json:/app/proxmox-config/config.json:ro
- /mnt/ssd/apps/mcp/pve1/config.json:/app/proxmox-config/config.json:ro
```