Исправил URL OpenAPI в Шаге 5 для Open WebUI
This commit is contained in:
@@ -12,14 +12,12 @@
|
|||||||
|
|
||||||
## Шаг 1. Создать API-токен на каждом Proxmox-узле
|
## Шаг 1. Создать API-токен на каждом Proxmox-узле
|
||||||
|
|
||||||
На каждом Proxmox-сервере отдельно открой **Datacenter → Permissions → API Tokens** и создай токен.
|
На каждом Proxmox-сервере открой **Datacenter → Permissions → API Tokens** и создай токен.
|
||||||
|
|
||||||
- User: `root@pam`;
|
- User: `root@pam`;
|
||||||
- Token ID должен точно совпадать со значением `auth.token_name` соответствующего `config.json`;
|
- Token ID должен совпадать со значением `auth.token_name` соответствующего `config.json`;
|
||||||
- сохрани Secret, который показывается только один раз.
|
- сохрани Secret, который показывается только один раз.
|
||||||
|
|
||||||
Повтори операцию для `kybinka` и `pve1`.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Шаг 2. Подготовить конфиги на TrueNAS
|
## Шаг 2. Подготовить конфиги на TrueNAS
|
||||||
@@ -30,7 +28,7 @@
|
|||||||
mkdir -p /mnt/ssd/apps/mcp/{pve,kybinka,pve1}
|
mkdir -p /mnt/ssd/apps/mcp/{pve,kybinka,pve1}
|
||||||
```
|
```
|
||||||
|
|
||||||
Для самоподписанных сертификатов Proxmox используй `verify_ssl: false` и `security.dev_mode: true`.
|
Для самоподписанных сертификатов Proxmox используются `verify_ssl: false` и `security.dev_mode: true`.
|
||||||
|
|
||||||
### Конфигурация `pve`
|
### Конфигурация `pve`
|
||||||
|
|
||||||
@@ -115,10 +113,10 @@ python3 -m json.tool /mnt/ssd/apps/mcp/kybinka/config.json
|
|||||||
python3 -m json.tool /mnt/ssd/apps/mcp/pve1/config.json
|
python3 -m json.tool /mnt/ssd/apps/mcp/pve1/config.json
|
||||||
```
|
```
|
||||||
|
|
||||||
Важное различие:
|
Важно:
|
||||||
|
|
||||||
- `auth.token_value` — Secret API-токена Proxmox, он хранится в `config.json`;
|
- `auth.token_value` — Secret API-токена Proxmox из `config.json`;
|
||||||
- `PROXMOX_API_KEY` — отдельный ключ защиты OpenAPI-сервера, он задаётся в compose/Dockge и используется в Open WebUI как Bearer-токен.
|
- `PROXMOX_API_KEY` — отдельный ключ OpenAPI из compose/Dockge, который используется в Open WebUI как Bearer-токен.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -168,13 +166,13 @@ services:
|
|||||||
- /mnt/ssd/apps/mcp/pve1/config.json:/app/proxmox-config/config.json:ro
|
- /mnt/ssd/apps/mcp/pve1/config.json:/app/proxmox-config/config.json:ro
|
||||||
```
|
```
|
||||||
|
|
||||||
Для каждого сервиса используй отдельный ключ. Сгенерировать ключ можно командой:
|
Для каждого сервиса используй отдельный ключ. Ключ можно сгенерировать командой:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
openssl rand -hex 32
|
openssl rand -hex 32
|
||||||
```
|
```
|
||||||
|
|
||||||
Замени значения `СГЕНЕРИРОВАТЬ_ОТДЕЛЬНЫЙ_КЛЮЧ_*` в Dockge, нажми **Save**, затем **Down** и **Deploy/Up**.
|
В Dockge нажми **Save**, затем **Down** и **Deploy/Up**.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -186,86 +184,101 @@ curl -f http://192.168.31.100:8812/livez
|
|||||||
curl -f http://192.168.31.100:8813/livez
|
curl -f http://192.168.31.100:8813/livez
|
||||||
```
|
```
|
||||||
|
|
||||||
Проверка OpenAPI для `pve` выполняется с ключом из переменной `PROXMOX_API_KEY` сервиса `proxmox-mcp-pve`:
|
Проверка OpenAPI для `pve`:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
curl -H "Authorization: Bearer КЛЮЧ_ИЗ_PROXMOX_API_KEY_PVE" \
|
curl -H "Authorization: Bearer КЛЮЧ_ИЗ_PROXMOX_API_KEY_PVE" \
|
||||||
http://192.168.31.100:8811/health
|
http://192.168.31.100:8811/health
|
||||||
```
|
```
|
||||||
|
|
||||||
Ожидаемый ответ:
|
|
||||||
|
|
||||||
```json
|
|
||||||
{"status":"ok"}
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Шаг 5. Подключить к Open WebUI
|
## Шаг 5. Подключить к Open WebUI
|
||||||
|
|
||||||
В Open WebUI перейди по пути:
|
В Open WebUI перейди:
|
||||||
|
|
||||||
```text
|
```text
|
||||||
Настройки → Интеграции → External Tool Servers → «+»
|
Настройки → Интеграции → External Tool Servers → «+»
|
||||||
```
|
```
|
||||||
|
|
||||||
Добавь сервер `pve`:
|
> Важно: в основном поле **URL** указывается только базовый адрес сервера. Не добавляй к нему `/openapi.json`, потому что Open WebUI добавляет путь спецификации отдельно.
|
||||||
|
|
||||||
|
### Сервер `pve`
|
||||||
|
|
||||||
```text
|
```text
|
||||||
Название: Proxmox pve
|
Название: Proxmox pve
|
||||||
URL: http://192.168.31.100:8811/openapi.json
|
URL: http://192.168.31.100:8811
|
||||||
Авторизация: Bearer
|
Авторизация: Bearer
|
||||||
Токен: значение PROXMOX_API_KEY из сервиса proxmox-mcp-pve в Dockge
|
Токен: значение PROXMOX_API_KEY из сервиса proxmox-mcp-pve в Dockge
|
||||||
|
Спецификация OpenAPI: openapi.json
|
||||||
```
|
```
|
||||||
|
|
||||||
Добавь сервер `kybinka`:
|
Итоговый адрес спецификации должен быть:
|
||||||
|
|
||||||
|
```text
|
||||||
|
http://192.168.31.100:8811/openapi.json
|
||||||
|
```
|
||||||
|
|
||||||
|
### Сервер `kybinka`
|
||||||
|
|
||||||
```text
|
```text
|
||||||
Название: Proxmox kybinka
|
Название: Proxmox kybinka
|
||||||
URL: http://192.168.31.100:8812/openapi.json
|
URL: http://192.168.31.100:8812
|
||||||
Авторизация: Bearer
|
Авторизация: Bearer
|
||||||
Токен: значение PROXMOX_API_KEY из сервиса proxmox-mcp-kybinka в Dockge
|
Токен: значение PROXMOX_API_KEY из сервиса proxmox-mcp-kybinka в Dockge
|
||||||
|
Спецификация OpenAPI: openapi.json
|
||||||
```
|
```
|
||||||
|
|
||||||
Добавь сервер `pve1`:
|
Итоговый адрес:
|
||||||
|
|
||||||
|
```text
|
||||||
|
http://192.168.31.100:8812/openapi.json
|
||||||
|
```
|
||||||
|
|
||||||
|
### Сервер `pve1`
|
||||||
|
|
||||||
```text
|
```text
|
||||||
Название: Proxmox pve1
|
Название: Proxmox pve1
|
||||||
URL: http://192.168.31.100:8813/openapi.json
|
URL: http://192.168.31.100:8813
|
||||||
Авторизация: Bearer
|
Авторизация: Bearer
|
||||||
Токен: значение PROXMOX_API_KEY из сервиса proxmox-mcp-pve1 в Dockge
|
Токен: значение PROXMOX_API_KEY из сервиса proxmox-mcp-pve1 в Dockge
|
||||||
|
Спецификация OpenAPI: openapi.json
|
||||||
```
|
```
|
||||||
|
|
||||||
Не используй для авторизации значение `auth.token_value` из `config.json`. Это другой Secret — он нужен MCP-серверу для подключения к Proxmox, а не Open WebUI.
|
Итоговый адрес:
|
||||||
|
|
||||||
После сохранения открой новый чат, нажми значок инструментов и включи нужный сервер, например `Proxmox pve`.
|
```text
|
||||||
|
http://192.168.31.100:8813/openapi.json
|
||||||
|
```
|
||||||
|
|
||||||
|
Не используй для авторизации значение `auth.token_value` из `config.json`. Это секрет подключения MCP-сервера к Proxmox, а не ключ OpenAPI.
|
||||||
|
|
||||||
|
После сохранения открой новый чат, нажми значок инструментов и включи нужный сервер.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Диагностика
|
## Диагностика
|
||||||
|
|
||||||
Если появляется ошибка:
|
Если Open WebUI формирует адрес вида:
|
||||||
|
|
||||||
```text
|
```text
|
||||||
Invalid API key
|
http://192.168.31.100:8811/openapi.json/openapi.json
|
||||||
```
|
```
|
||||||
|
|
||||||
проверь, что Bearer-токен в Open WebUI полностью совпадает с `PROXMOX_API_KEY` соответствующего контейнера в Dockge.
|
замени URL сервера на базовый:
|
||||||
|
|
||||||
Если появляется ошибка:
|
|
||||||
|
|
||||||
```text
|
```text
|
||||||
Insecure TLS configuration blocked
|
http://192.168.31.100:8811
|
||||||
```
|
```
|
||||||
|
|
||||||
проверь наличие блока:
|
а в поле спецификации оставь только:
|
||||||
|
|
||||||
```json
|
```text
|
||||||
"security": {
|
openapi.json
|
||||||
"dev_mode": true
|
|
||||||
}
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Если появляется `McpError: Connection closed`, сначала ищи выше в логе первичную ошибку конфигурации.
|
Если появляется `Invalid API key`, Bearer-токен Open WebUI не совпадает с `PROXMOX_API_KEY` соответствующего контейнера Dockge.
|
||||||
|
|
||||||
|
Если появляется `McpError: Connection closed`, сначала ищи выше в логе первичную ошибку.
|
||||||
|
|
||||||
> Не публикуй реальные значения `PROXMOX_API_KEY` и `auth.token_value` в чат или репозиторий. Если они были опубликованы, их следует заменить.
|
> Не публикуй реальные значения `PROXMOX_API_KEY` и `auth.token_value` в чат или репозиторий. Если они были опубликованы, их следует заменить.
|
||||||
|
|||||||
Reference in New Issue
Block a user