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

285 lines
7.8 KiB
Markdown
Raw Permalink 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** с OpenAPI-интерфейсом для Open WebUI.
## Архитектура
Узлы `pve`, `kybinka` и `pve1` — независимые Proxmox-серверы. Для каждого узла запускается отдельный MCP-контейнер с отдельным портом.
---
## Шаг 1. Создать API-токен на каждом Proxmox-узле
На каждом Proxmox-сервере открой **Datacenter → Permissions → API Tokens** и создай токен.
- User: `root@pam`;
- Token ID должен совпадать со значением `auth.token_name` соответствующего `config.json`;
- сохрани Secret, который показывается только один раз.
---
## Шаг 2. Подготовить конфиги на TrueNAS
Создай каталоги:
```bash
mkdir -p /mnt/ssd/apps/mcp/{pve,kybinka,pve1}
```
Для самоподписанных сертификатов Proxmox используются `verify_ssl: false` и `security.dev_mode: true`.
### Конфигурация `pve`
```bash
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"
},
"security": {
"dev_mode": true
}
}
EOF
```
### Конфигурация `kybinka`
```bash
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": "open-webui",
"token_value": "СЕКРЕТНЫЙ_ТОКЕН_KYBINKA"
},
"logging": {
"level": "INFO"
},
"security": {
"dev_mode": true
}
}
EOF
```
### Конфигурация `pve1`
```bash
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": "open-webui",
"token_value": "СЕКРЕТНЫЙ_ТОКЕН_PVE1"
},
"logging": {
"level": "INFO"
},
"security": {
"dev_mode": true
}
}
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
```
Важно:
- `auth.token_value` — Secret API-токена Proxmox из `config.json`;
- `PROXMOX_API_KEY` — отдельный ключ OpenAPI из compose/Dockge, который используется в Open WebUI как Bearer-токен.
---
## Шаг 3. Запустить три контейнера через Dockge
В Dockge создай один Stack `proxmox-mcp` с рабочей директорией:
```text
/mnt/ssd/apps/mcp
```
Используй один 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
```
Для каждого сервиса используй отдельный ключ. Ключ можно сгенерировать командой:
```bash
openssl rand -hex 32
```
В Dockge нажми **Save**, затем **Down** и **Deploy/Up**.
---
## Шаг 4. Проверить контейнеры
```bash
curl -f http://192.168.31.100:8811/livez
curl -f http://192.168.31.100:8812/livez
curl -f http://192.168.31.100:8813/livez
```
Проверка OpenAPI для `pve`:
```bash
curl -H "Authorization: Bearer КЛЮЧ_ИЗ_PROXMOX_API_KEY_PVE" \
http://192.168.31.100:8811/health
```
---
## Шаг 5. Подключить к Open WebUI
В Open WebUI перейди:
```text
Настройки → Интеграции → External Tool Servers → «+»
```
> Важно: в основном поле **URL** указывается только базовый адрес сервера. Не добавляй к нему `/openapi.json`, потому что Open WebUI добавляет путь спецификации отдельно.
### Сервер `pve`
```text
Название: Proxmox pve
URL: http://192.168.31.100:8811
Авторизация: Bearer
Токен: значение PROXMOX_API_KEY из сервиса proxmox-mcp-pve в Dockge
Спецификация OpenAPI: openapi.json
```
Итоговый адрес спецификации должен быть:
```text
http://192.168.31.100:8811/openapi.json
```
### Сервер `kybinka`
```text
Название: Proxmox kybinka
URL: http://192.168.31.100:8812
Авторизация: Bearer
Токен: значение PROXMOX_API_KEY из сервиса proxmox-mcp-kybinka в Dockge
Спецификация OpenAPI: openapi.json
```
Итоговый адрес:
```text
http://192.168.31.100:8812/openapi.json
```
### Сервер `pve1`
```text
Название: Proxmox pve1
URL: http://192.168.31.100:8813
Авторизация: Bearer
Токен: значение PROXMOX_API_KEY из сервиса proxmox-mcp-pve1 в Dockge
Спецификация OpenAPI: openapi.json
```
Итоговый адрес:
```text
http://192.168.31.100:8813/openapi.json
```
Не используй для авторизации значение `auth.token_value` из `config.json`. Это секрет подключения MCP-сервера к Proxmox, а не ключ OpenAPI.
После сохранения открой новый чат, нажми значок инструментов и включи нужный сервер.
---
## Диагностика
Если Open WebUI формирует адрес вида:
```text
http://192.168.31.100:8811/openapi.json/openapi.json
```
замени URL сервера на базовый:
```text
http://192.168.31.100:8811
```
а в поле спецификации оставь только:
```text
openapi.json
```
Если появляется `Invalid API key`, Bearer-токен Open WebUI не совпадает с `PROXMOX_API_KEY` соответствующего контейнера Dockge.
Если появляется `McpError: Connection closed`, сначала ищи выше в логе первичную ошибку.
> Не публикуй реальные значения `PROXMOX_API_KEY` и `auth.token_value` в чат или репозиторий. Если они были опубликованы, их следует заменить.