diff --git a/proxmox-mcp-open-webui-setup.md b/proxmox-mcp-open-webui-setup.md index 3866639..85131e3 100644 --- a/proxmox-mcp-open-webui-setup.md +++ b/proxmox-mcp-open-webui-setup.md @@ -15,7 +15,7 @@ На каждом Proxmox-сервере отдельно открой **Datacenter → Permissions → API Tokens** и создай токен. - User: `root@pam`; -- Token ID должен точно совпадать со значением `auth.token_name`; +- Token ID должен точно совпадать со значением `auth.token_name` соответствующего `config.json`; - сохрани Secret, который показывается только один раз. Повтори операцию для `kybinka` и `pve1`. @@ -115,6 +115,11 @@ 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 @@ -136,7 +141,7 @@ services: ports: - "8811:8811" environment: - PROXMOX_API_KEY: "ЗАМЕНИТЬ_КЛЮЧ_PVE" + PROXMOX_API_KEY: "СГЕНЕРИРОВАТЬ_ОТДЕЛЬНЫЙ_КЛЮЧ_PVE" volumes: - /mnt/ssd/apps/mcp/pve/config.json:/app/proxmox-config/config.json:ro @@ -147,7 +152,7 @@ services: ports: - "8812:8811" environment: - PROXMOX_API_KEY: "ЗАМЕНИТЬ_КЛЮЧ_KYBINKA" + PROXMOX_API_KEY: "СГЕНЕРИРОВАТЬ_ОТДЕЛЬНЫЙ_КЛЮЧ_KYBINKA" volumes: - /mnt/ssd/apps/mcp/kybinka/config.json:/app/proxmox-config/config.json:ro @@ -158,12 +163,18 @@ services: ports: - "8813:8811" environment: - PROXMOX_API_KEY: "ЗАМЕНИТЬ_КЛЮЧ_PVE1" + PROXMOX_API_KEY: "СГЕНЕРИРОВАТЬ_ОТДЕЛЬНЫЙ_КЛЮЧ_PVE1" volumes: - /mnt/ssd/apps/mcp/pve1/config.json:/app/proxmox-config/config.json:ro ``` -Нажми **Save**, затем **Down** и **Deploy/Up**. +Для каждого сервиса используй отдельный ключ. Сгенерировать ключ можно командой: + +```bash +openssl rand -hex 32 +``` + +Замени значения `СГЕНЕРИРОВАТЬ_ОТДЕЛЬНЫЙ_КЛЮЧ_*` в Dockge, нажми **Save**, затем **Down** и **Deploy/Up**. --- @@ -175,59 +186,57 @@ curl -f http://192.168.31.100:8812/livez curl -f http://192.168.31.100:8813/livez ``` -Проверка авторизации OpenAPI: +Проверка OpenAPI для `pve` выполняется с ключом из переменной `PROXMOX_API_KEY` сервиса `proxmox-mcp-pve`: ```bash -curl -H "Authorization: Bearer ЗАМЕНИТЬ_КЛЮЧ_PVE" \ +curl -H "Authorization: Bearer КЛЮЧ_ИЗ_PROXMOX_API_KEY_PVE" \ http://192.168.31.100:8811/health ``` +Ожидаемый ответ: + +```json +{"status":"ok"} +``` + --- ## Шаг 5. Подключить к Open WebUI -В текущем интерфейсе Open WebUI добавление OpenAPI-серверов выполняется не через раздел **Инструменты** и не через кнопку **Новый инструмент**. - -Используй следующий путь: +В Open WebUI перейди по пути: ```text Настройки → Интеграции → External Tool Servers → «+» ``` -В открывшейся форме добавь сервер `pve`: +Добавь сервер `pve`: ```text Название: Proxmox pve URL: http://192.168.31.100:8811/openapi.json Авторизация: Bearer -Токен: значение PROXMOX_API_KEY для proxmox-mcp-pve +Токен: значение PROXMOX_API_KEY из сервиса proxmox-mcp-pve в Dockge ``` -Нажми **Сохранить**. - -Затем добавь два остальных сервера: +Добавь сервер `kybinka`: ```text Название: Proxmox kybinka URL: http://192.168.31.100:8812/openapi.json Авторизация: Bearer -Токен: значение PROXMOX_API_KEY для proxmox-mcp-kybinka +Токен: значение PROXMOX_API_KEY из сервиса proxmox-mcp-kybinka в Dockge ``` +Добавь сервер `pve1`: + ```text Название: Proxmox pve1 URL: http://192.168.31.100:8813/openapi.json Авторизация: Bearer -Токен: значение PROXMOX_API_KEY для proxmox-mcp-pve1 +Токен: значение PROXMOX_API_KEY из сервиса proxmox-mcp-pve1 в Dockge ``` -Важно: - -- нажимай «+» именно в строке **External Tool Servers**; -- не используй «+» возле **Open Terminal**; -- не используй **Новый инструмент** на странице пользовательских Tools; -- для каждого сервера указывай отдельный Bearer-токен из compose-файла; -- `PROXMOX_API_KEY` — это ключ OpenAPI-сервера, он отличается от `auth.token_value` в `config.json`. +Не используй для авторизации значение `auth.token_value` из `config.json`. Это другой Secret — он нужен MCP-серверу для подключения к Proxmox, а не Open WebUI. После сохранения открой новый чат, нажми значок инструментов и включи нужный сервер, например `Proxmox pve`. @@ -235,7 +244,21 @@ URL: http://192.168.31.100:8813/openapi.json ## Диагностика -Если появляется ошибка `Insecure TLS configuration blocked`, проверь наличие блока: +Если появляется ошибка: + +```text +Invalid API key +``` + +проверь, что Bearer-токен в Open WebUI полностью совпадает с `PROXMOX_API_KEY` соответствующего контейнера в Dockge. + +Если появляется ошибка: + +```text +Insecure TLS configuration blocked +``` + +проверь наличие блока: ```json "security": { @@ -245,17 +268,4 @@ URL: http://192.168.31.100:8813/openapi.json Если появляется `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` в чат или репозиторий. Если они были опубликованы, их следует заменить.