3.6 KiB
Запрос Opus — диагностика DrHider «Failed to fetch»
Файл: /home/naeel/nubes/contracts/contracts-flask/History/opus-drhider-debug-2026-06-29.md
Дата: 29.06.2026
Ситуация
Сервис DrHider развёрнут по архитектуре: Managed Flask (прокси) → VM (обработка).
Пользователь заходит на https://contractor.pythonk8s.services.ngcloud.ru/DrHider, выбирает файл, жмёт «Обфусцировать» → получает ❌ Ошибка: Failed to fetch.
«Failed to fetch» — это браузерная ошибка, значит JS-запрос POST /api/drhider не дошёл до сервера или ответ не получен.
Архитектура
Браузер → Managed Flask (contractor.pythonk8s...) → VM (contracts.kube5s.ru:8766)
/DrHider отдаёт HTML
POST /api/drhider проксирует файлы на VM → /api/drhider
VM делает обфускацию с LLM → возвращает ZIP
Что проверено
- VM:
convert_server.pyперезапущен,curl http://127.0.0.1:8766/health→ 200 OK. Роут/api/drhiderдобавлен вdo_POST. - Модуль:
services/drhider.pyскопирован на VM в~/contracts/services/drhider.py. - Git: все изменения запушены.
Что НЕ проверено / неизвестно
-
Managed Flask редеплоился ли? Код запушен, но редеплой ручной через Nubes UI. Если редеплоя не было — роута
/api/drhiderне существует → Flask возвращает 404 → браузер показывает «Failed to fetch» (не JSON, не ZIP). -
LLM env vars на VM.
LLM_API_KEYустановлен? Если нет —HttpxLLMClientсоздастся, но вызовllm.complete()упадёт. -
parse_multipart на VM. Файлы с managed Flask приходят как multipart/form-data.
services/upload.py:parse_multipart()ожидает определённый формат. Совместим ли он с тем что шлёт managed Flask? -
Таймаут. Managed Flask → VM: httpx.Client(timeout=300). Но сама обфускация с LLM-NER для 100+ файлов может занять минуты. Не оборвётся ли соединение?
-
CORS. Managed Flask делает запрос к VM. Это сервер-сервер, CORS не нужен. Но браузер делает запрос к managed Flask — тут CORS в порядке (same origin).
-
nginx на VM. Проксирует ли nginx
POST /api/drhiderна порт 8766? Или роут не прописан вnginx-contracts.conf?
Что нужно проверить Опуса
Скажи КАК диагностировать каждый пункт и в каком порядке:
- Проверить что managed Flask действительно задеплоен с новым кодом (GET /DrHider возвращает НОВЫЙ HTML, не старую страницу)
- Проверить что POST /api/drhider на managed Flask отвечает (curl с файлом)
- Проверить что nginx на VM проксирует /api/drhider
- Проверить что LLM_API_KEY есть на VM
- Проверить полный цикл: curl managed Flask → VM → ответ
Конкретные curl-команды для диагностики на каждом шаге.