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

262 lines
7.2 KiB
Markdown

# Установка 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`;
- сохрани Secret, который показывается только один раз.
Повтори операцию для `kybinka` и `pve1`.
---
## Шаг 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
```
---
## Шаг 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
```
Нажми **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:
```bash
curl -H "Authorization: Bearer ЗАМЕНИТЬ_КЛЮЧ_PVE" \
http://192.168.31.100:8811/health
```
---
## Шаг 5. Подключить к Open WebUI
В текущем интерфейсе Open WebUI добавление OpenAPI-серверов выполняется не через раздел **Инструменты** и не через кнопку **Новый инструмент**.
Используй следующий путь:
```text
Настройки → Интеграции → External Tool Servers → «+»
```
В открывшейся форме добавь сервер `pve`:
```text
Название: Proxmox pve
URL: http://192.168.31.100:8811/openapi.json
Авторизация: Bearer
Токен: значение PROXMOX_API_KEY для proxmox-mcp-pve
```
Нажми **Сохранить**.
Затем добавь два остальных сервера:
```text
Название: Proxmox kybinka
URL: http://192.168.31.100:8812/openapi.json
Авторизация: Bearer
Токен: значение PROXMOX_API_KEY для proxmox-mcp-kybinka
```
```text
Название: Proxmox pve1
URL: http://192.168.31.100:8813/openapi.json
Авторизация: Bearer
Токен: значение PROXMOX_API_KEY для proxmox-mcp-pve1
```
Важно:
- нажимай «+» именно в строке **External Tool Servers**;
- не используй «+» возле **Open Terminal**;
- не используй **Новый инструмент** на странице пользовательских Tools;
- для каждого сервера указывай отдельный Bearer-токен из compose-файла;
- `PROXMOX_API_KEY` — это ключ OpenAPI-сервера, он отличается от `auth.token_value` в `config.json`.
После сохранения открой новый чат, нажми значок инструментов и включи нужный сервер, например `Proxmox pve`.
---
## Диагностика
Если появляется ошибка `Insecure TLS configuration blocked`, проверь наличие блока:
```json
"security": {
"dev_mode": true
}
```
Если появляется `McpError: Connection closed`, сначала ищи выше в логе первичную ошибку конфигурации.
Проверка volume-маунта:
```bash
docker inspect proxmox-mcp-pve \
--format '{{range .Mounts}}{{println .Source "->" .Destination}}{{end}}'
```
Ожидаемый результат:
```text
/mnt/ssd/apps/mcp/pve/config.json -> /app/proxmox-config/config.json
```
> Не публикуй реальные значения `PROXMOX_API_KEY` и `auth.token_value` в чат или репозиторий. Если они были опубликованы, их следует заменить.