[tradein] tradein-browser в crash-loop: camoufox InvalidProxy mproxy.site:16928 (прокси недоступен/истёк) #1184

Closed
opened 2026-06-12 08:13:10 +00:00 by lekss361 · 5 comments
Owner

Обнаружено qa-tester'ом при post-deploy верификации #1183 (2026-06-12, ~11:10). НЕ регрессия #1183 — контейнер рестартовал и до этого деплоя.

Симптом (прод)

  • docker ps: tradein-browserRestarting (1) crash-loop.
  • docker logs tradein-browser:
    camoufox.exceptions.InvalidProxy: Failed to connect to proxy: http://<user>:<pass>@mproxy.site:16928
    
  • Остальной tradein-стек здоров (backend /health 200, scraper tick=60s, postgres healthy).

Эффект

Browser-зависимые скрейп-пути (camoufox/Firefox: avito browser-ветка, cian валюатор и пр.) не работают, пока браузер в crash-loop. Sweep'ы, не требующие browser, не затронуты.

Что нужно (needs-human)

Проверить статус прокси-аккаунта mproxy.site:16928 (истёк? сменился порт/креды?) → обновить SCRAPER_PROXY_URL в /opt/gendesign/tradein-mvp/backend/.env.runtime (через sed, не перезапись файла) → docker compose -p gendesign-tradein up -d --force-recreate --no-deps browser. Креды прокси — у Anton/resolver, бот сам не достанет.

Acceptance

docker ps: tradein-browser Up стабильно >5 мин; логи без InvalidProxy; тестовый browser-fetch проходит.

Обнаружено qa-tester'ом при post-deploy верификации #1183 (2026-06-12, ~11:10). **НЕ регрессия #1183** — контейнер рестартовал и до этого деплоя. ## Симптом (прод) - `docker ps`: `tradein-browser` → **Restarting (1)** crash-loop. - `docker logs tradein-browser`: ``` camoufox.exceptions.InvalidProxy: Failed to connect to proxy: http://<user>:<pass>@mproxy.site:16928 ``` - Остальной tradein-стек здоров (backend /health 200, scraper tick=60s, postgres healthy). ## Эффект Browser-зависимые скрейп-пути (camoufox/Firefox: avito browser-ветка, cian валюатор и пр.) не работают, пока браузер в crash-loop. Sweep'ы, не требующие browser, не затронуты. ## Что нужно (needs-human) Проверить статус прокси-аккаунта `mproxy.site:16928` (истёк? сменился порт/креды?) → обновить `SCRAPER_PROXY_URL` в `/opt/gendesign/tradein-mvp/backend/.env.runtime` (через sed, не перезапись файла) → `docker compose -p gendesign-tradein up -d --force-recreate --no-deps browser`. Креды прокси — у Anton/resolver, бот сам не достанет. ## Acceptance `docker ps`: tradein-browser Up стабильно >5 мин; логи без InvalidProxy; тестовый browser-fetch проходит.
lekss361 added the
bug
needs-human
scrapers
tradein
labels 2026-06-12 08:13:16 +00:00
Collaborator

Диагностика (2026-06-13): единый корень — external mobile-proxy mproxy.site недоступен.

Проверено эмпирически с прод-VPS:

  • curl mproxy.site:15398connect 000, 0.000s = UNREACHABLE (хост не отвечает / DNS / IP-бан / подписка).
  • Proxy-URL'ы в env заданы (CIAN_PROXY_URL / YANDEX_PROXY_URL / AVITO_PROXY_URL — все set) → это НЕ конфиг-проблема, сам proxy-сервис mproxy.site лежит.
  • tradein-browser (camoufox) в crash-loop (Restarting) — InvalidProxy ровно из-за mproxy недоступности.
  • Bounded прогон newbuilding_enrich (curl_cffi, в обход browser): Failed to connect mproxy.site port 15398 на КАЖДОМ fetch → 0 succeeded.

Этот единый блокер валит:

  • #1184 (этот issue — camoufox InvalidProxy)
  • #972 (newbuilding backfill — enrichment fetch через mproxy)
  • #974 (yandex_newbuilding — sweep через mproxy)
  • всю external-scraping инфру (cian/yandex/avito sweeps)

Actionable (нужен владелец proxy-подписки — не автономно):

  1. Проверить подписку/баланс mproxy.site (mobile-proxy обычно платный, мог истечь).
  2. Проверить не сменился ли endpoint/порт (был :15398) — обновить SCRAPER_PROXY_URL / *_PROXY_URL в .env.runtime.
  3. Если mproxy.site мёртв как провайдер — заменить proxy (тогда #884-886 camoufox-миграция получает рабочий proxy-слой).
  4. После восстановления proxy: tradein-browser сам перестанет крешиться; #972 активируется через UPDATE scrape_schedules SET enabled=true WHERE source='newbuilding_enrich' (расписание уже в проде, dormant); #974 аналогично yandex_city_sweep.

Код-стороны всё готово (enrichment curl_cffi работает, расписание #973 в проде) — упирается ТОЛЬКО в недоступный proxy-сервис.

**Диагностика (2026-06-13): единый корень — external mobile-proxy `mproxy.site` недоступен.** Проверено эмпирически с прод-VPS: - `curl mproxy.site:15398` → **connect 000, 0.000s = UNREACHABLE** (хост не отвечает / DNS / IP-бан / подписка). - Proxy-URL'ы в env заданы (CIAN_PROXY_URL / YANDEX_PROXY_URL / AVITO_PROXY_URL — все set) → это НЕ конфиг-проблема, сам proxy-сервис mproxy.site лежит. - `tradein-browser` (camoufox) в crash-loop (`Restarting`) — InvalidProxy ровно из-за mproxy недоступности. - Bounded прогон `newbuilding_enrich` (curl_cffi, в обход browser): `Failed to connect mproxy.site port 15398` на КАЖДОМ fetch → 0 succeeded. **Этот единый блокер валит:** - #1184 (этот issue — camoufox InvalidProxy) - #972 (newbuilding backfill — enrichment fetch через mproxy) - #974 (yandex_newbuilding — sweep через mproxy) - всю external-scraping инфру (cian/yandex/avito sweeps) **Actionable (нужен владелец proxy-подписки — не автономно):** 1. Проверить подписку/баланс mproxy.site (mobile-proxy обычно платный, мог истечь). 2. Проверить не сменился ли endpoint/порт (был `:15398`) — обновить SCRAPER_PROXY_URL / *_PROXY_URL в `.env.runtime`. 3. Если mproxy.site мёртв как провайдер — заменить proxy (тогда #884-886 camoufox-миграция получает рабочий proxy-слой). 4. После восстановления proxy: `tradein-browser` сам перестанет крешиться; #972 активируется через `UPDATE scrape_schedules SET enabled=true WHERE source='newbuilding_enrich'` (расписание уже в проде, dormant); #974 аналогично yandex_city_sweep. Код-стороны всё готово (enrichment curl_cffi работает, расписание #973 в проде) — упирается ТОЛЬКО в недоступный proxy-сервис.
Collaborator

Частично адресовано — resilience-половина пофикшена в коде (PR #1330, merged f376d8c):

tradein-browser больше НЕ будет крашлупить при down-прокси. camoufox launch стал non-fatal: app.startup не падает, фоновая задача ретраит launch с backoff (30→60с) и поднимет браузер сама, когда прокси вернётся. /fetch+/login отдают 503 пока браузера нет (caller graceful, не краш). proxy+geoip сохранены — никакого direct-connection fallback (ban-risk нет). Креды прокси больше не светятся в логах (только type(exc).__name__). code-reviewer APPROVE, 4 smoke-теста.

Остаётся needs-human (домен Anton), не закрываю:

  1. Задеплоить фикс на работающий контейнер — это tradein-mvp (отдельно от основного deploy.yml). На сервере: cd /opt/gendesign/tradein-mvp && git pull && docker compose -p gendesign-tradein up -d --build --force-recreate --no-deps browser. После — RestartCount перестанет расти, контейнер Up, /healthbrowser_ready:false пока прокси лежит.
  2. Восстановить прокси mproxy.site:16928 (истёк/сменились креды) → обновить SCRAPER_PROXY_URL в .env.runtime. Без этого скрапинг остаётся неактивным (но теперь gracefully, без crash-loop).

Т.е. crash-loop = fixed-in-code (deploy pending), proxy-down = по-прежнему needs-human.

Частично адресовано — **resilience-половина пофикшена в коде** (PR #1330, merged `f376d8c`): `tradein-browser` больше НЕ будет крашлупить при down-прокси. camoufox launch стал non-fatal: `app.startup` не падает, фоновая задача ретраит launch с backoff (30→60с) и поднимет браузер сама, когда прокси вернётся. `/fetch`+`/login` отдают **503** пока браузера нет (caller graceful, не краш). **proxy+geoip сохранены — никакого direct-connection fallback (ban-risk нет).** Креды прокси больше не светятся в логах (только `type(exc).__name__`). code-reviewer APPROVE, 4 smoke-теста. **Остаётся needs-human (домен Anton), не закрываю:** 1. **Задеплоить фикс** на работающий контейнер — это `tradein-mvp` (отдельно от основного deploy.yml). На сервере: `cd /opt/gendesign/tradein-mvp && git pull && docker compose -p gendesign-tradein up -d --build --force-recreate --no-deps browser`. После — RestartCount перестанет расти, контейнер `Up`, `/health`→`browser_ready:false` пока прокси лежит. 2. **Восстановить прокси** `mproxy.site:16928` (истёк/сменились креды) → обновить `SCRAPER_PROXY_URL` в `.env.runtime`. Без этого скрапинг остаётся неактивным (но теперь gracefully, без crash-loop). Т.е. crash-loop = fixed-in-code (deploy pending), proxy-down = по-прежнему needs-human.
Author
Owner

Resolver-ready (статус 2026-06-17)

Блокер не код, а ops: tradein-browser в crash-loop из-за camoufox InvalidProxy mproxy.site:16928. Нужно (resolver/prod-доступ): (1) ssh gendesign → docker logs tradein-browser подтвердить текущую ошибку прокси; (2) проверить статус кред mproxy.site:16928 (живы ли, не сменился ли порт/пароль) против .env.runtime; (3) обновить прокси-конфиг + docker compose restart tradein-browser. Код BrowserFetcher готов — упирается в живой прокси. Owned by scraper-окно.

## Resolver-ready (статус 2026-06-17) Блокер не код, а ops: `tradein-browser` в crash-loop из-за `camoufox InvalidProxy mproxy.site:16928`. Нужно (resolver/prod-доступ): (1) `ssh gendesign → docker logs tradein-browser` подтвердить текущую ошибку прокси; (2) проверить статус кред `mproxy.site:16928` (живы ли, не сменился ли порт/пароль) против `.env.runtime`; (3) обновить прокси-конфиг + `docker compose restart tradein-browser`. Код BrowserFetcher готов — упирается в живой прокси. Owned by scraper-окно.
Author
Owner

Коррекция (живой прод 2026-06-17) — degraded, НЕ полный crash-loop

Прошлая оценка «crash-loop, всё мёртво» переоценена. Факт по scrape_runs:

  • SERP avito работает (run 115: 461 lots fetched, 90 inserted).
  • curl_cffi+proxy detail-путь работает: avito_detail_backfill run 124 enriched 394/445 сегодня.
  • Падает только browser-mode detail (run 115 status banned, error: Avito detail firewall (browser-mode)).

Т.е. tradein-browser/camoufox для avito-detail упирается в firewall, но есть рабочий fallback (curl). Это тюнинг browser-mode прокси, а не глухой блокер всего avito. active avito 444 (низко vs cian 15k) — следствие именно browser-detail деградации + недавнего запуска.

Остаётся ops-задача (resolver/scraper-окно): проверить camoufox proxy-конфиг mproxy.site:16928 для browser-mode, либо признать curl-путь достаточным и понизить приоритет. Не demo-блокер.

## Коррекция (живой прод 2026-06-17) — degraded, НЕ полный crash-loop Прошлая оценка «crash-loop, всё мёртво» переоценена. Факт по `scrape_runs`: - SERP avito работает (run 115: 461 lots fetched, 90 inserted). - **curl_cffi+proxy** detail-путь работает: `avito_detail_backfill` run 124 enriched **394/445** сегодня. - Падает только **browser-mode detail** (run 115 status `banned`, `error: Avito detail firewall (browser-mode)`). Т.е. `tradein-browser`/camoufox для avito-detail упирается в firewall, но есть рабочий fallback (curl). Это **тюнинг browser-mode прокси**, а не глухой блокер всего avito. active avito 444 (низко vs cian 15k) — следствие именно browser-detail деградации + недавнего запуска. Остаётся ops-задача (resolver/scraper-окно): проверить camoufox proxy-конфиг `mproxy.site:16928` для browser-mode, либо признать curl-путь достаточным и понизить приоритет. Не demo-блокер.
lekss361 added the
priority/p1
label 2026-06-17 20:17:56 +00:00
Collaborator

Закрыто — crash-loop устранён. tradein-browser Up 2ч+ стабильно, 0 InvalidProxy в логах с рестарта. Per-provider lazy launch (браузер стартует по требованию, а не на старте) + ротированные прокси:

  • avito → auv.mobileproxy.space:10049 (рабочий — IMV/SERP сегодня шли через него);
  • generic SCRAPER_PROXY_URLmproxy.site:14619 (ротирован с мёртвого :16928, сейчас alive, egress 94.25.174.131).

Acceptance выполнен: Up >5мин, логи без InvalidProxy, browser-fetch проходит (валидировано на IMV-проверке 2026-06-26).

✅ Закрыто — crash-loop устранён. `tradein-browser` Up 2ч+ стабильно, **0 `InvalidProxy`** в логах с рестарта. Per-provider lazy launch (браузер стартует по требованию, а не на старте) + ротированные прокси: - avito → `auv.mobileproxy.space:10049` (рабочий — IMV/SERP сегодня шли через него); - generic `SCRAPER_PROXY_URL` → `mproxy.site:14619` (ротирован с мёртвого :16928, сейчас **alive**, egress 94.25.174.131). Acceptance выполнен: Up >5мин, логи без InvalidProxy, browser-fetch проходит (валидировано на IMV-проверке 2026-06-26).
Sign in to join this conversation.
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#1184
No description provided.