[2026-09-29] eagle: family/how-to/arr-stack-taiga.md personal/tech/flaresolverr-taiga.md

This commit is contained in:
Alexey Martemyanov committed 2026-09-29 11:20:03 +06:00
1 parent 97cd48e13c
commit f7914b6a71
2 files changed
+61 -2

No files matched your search

+22
View File
@@ -24,7 +24,11 @@ related:
- Lidarr → SkyHook: 10 результатов через VLESS proxy.
- Lidarr → Transmission: штатный test проходит.
- Prowlarr → RuTracker: реальный search возвращает 50 результатов.
- Prowlarr → Kinozal: реальный search возвращает 14 результатов.
- FlareSolverr: health `ok`, session `prowlarr` создаётся с proxy и pre-login.
- 3x-ui egress закреплён: Sweden master → Poland failover → текущий auto-resolve.
- Три последовательных proxy-запроса сохраняют один внешний IP.
- FlareSolverr watcher автоматически восстанавливает session и RuTracker login после потери.
Health-warning у Sonarr/Lidarr может показывать старый quarantine индексаторов. Проверять нужно реальным search и `IndexerStatus`, а не одной строкой health.
@@ -55,6 +59,18 @@ Compose:
2. FlareSolverr/Chrome → RuTracker идёт через `socks5://vless-proxy:1080`.
3. Локальный Transmission идёт напрямую по `transmission:9091`.
### Sticky egress для трекеров
Настройки 3x-ui находятся на Taiga в `/mnt/RED_2TB/docker/xray-admin/x-ui.db`. Для пользователя `vless-space` используется цепочка:
```text
space-master → sub1-sweden-yt
space-failover → sub1-poland-yt
space-auto → sub1-* / leastLoad
```
Master и первый failover не должны быть заменены общим `leastLoad`: смена egress-IP между challenge и повторным запросом инвалидирует Cloudflare-cookie.
Lidarr должен иметь:
```text
@@ -78,6 +94,8 @@ Entrypoint:
При старте он ждёт `/health`, создаёт session `prowlarr` с `socks5://vless-proxy:1080`, читает credentials RuTracker из Prowlarr SQLite в режиме `immutable=1`, выполняет pre-login и запускает основной процесс. В compose важны `PROXY_URL`, `BROWSER_TIMEOUT=180000`, `shm_size: 1gb`, `restart: unless-stopped` и read-only mount каталога Prowlarr.
После старта watcher проверяет egress-IP каждую минуту и login-состояние RuTracker каждые пять минут. При смене IP или потере login он пересоздаёт session и выполняет pre-login заново.
RuTracker должен иметь оба Prowlarr-тега:
```text
@@ -128,6 +146,10 @@ curl -H "X-Api-Key: $PROWLARR_KEY" \
`PROXY_URL` применяется при создании Chrome session. После изменения proxy session нужно пересоздать. Entrypoint делает это автоматически при старте FlareSolverr.
### Профиль прокси меняется между запросами
Симптом: FlareSolverr успешно решает challenge, но Prowlarr получает `Auth Failed` или timeout на следующем запросе. Причина — 3x-ui `leastLoad` выбрал другой профиль и внешний IP изменился. Исправление — pinned master/failover chain и watcher relogin; timeout сам по себе проблему не решает.
### Prowlarr API маскирует password
GET индексатора возвращает `********`. Нельзя использовать такой JSON для pre-login. Рабочий pre-login читает SQLite read-only из отдельного контейнера.
+39 -2
View File
@@ -24,6 +24,17 @@ Prowlarr
└─ RuTracker
```
Внешний egress для arr закреплён на маршруте 3x-ui:
```text
vless-space
└─ space-master: sub1-sweden-yt
└─ space-failover: sub1-poland-yt
└─ space-auto: текущий leastLoad по подписке
```
Это важно для Cloudflare: FlareSolverr и последующий запрос Prowlarr должны выходить через один IP. Общий `leastLoad` по всем профилям без pinned master ломает cookie handoff.
Файлы на TrueNAS:
```text
@@ -43,7 +54,9 @@ Entrypoint при каждом старте:
3. создаёт `prowlarr` с `socks5://vless-proxy:1080`;
4. читает credentials RuTracker из `prowlarr.db` через SQLite URI `mode=ro&immutable=1`;
5. делает pre-login через FlareSolverr;
6. оставляет основной процесс FlareSolverr работать.
6. оставляет основной процесс FlareSolverr работать;
7. проверяет egress-IP раз в минуту и login-состояние RuTracker раз в пять минут;
8. при смене IP или потере login-состояния пересоздаёт session `prowlarr` и выполняет login заново.
SQLite монтируется read-only. Обычный `sqlite3.connect('/prowlarr.db')` на read-only mount может упасть с `unable to open database file`; нужен именно `immutable=1`.
@@ -72,6 +85,26 @@ RuTracker tags = [1,2]
FlareSolverr requestTimeout = 180 seconds
```
## 3x-ui: master и failover
Шаблон находится в базе 3x-ui:
```text
/mnt/RED_2TB/docker/xray-admin/x-ui.db
```
Текущая цепочка:
```text
space-master selector=[sub1-sweden-yt] fallback=space-failover
space-failover selector=[sub1-poland-yt] fallback=space-auto
space-auto selector=[sub1-] strategy=leastLoad
```
Не использовать общий `leastLoad` как первый уровень для RuTracker/Kinozal: он может менять egress между соединениями. `maxRTT` и `tolerance` фильтруют кандидатов, но не делают выбор sticky.
Перед изменением базы сохранять backup. После изменения проверить сгенерированный `/app/bin/config.json` и выполнить `xray -test`; не редактировать сгенерированный файл напрямую.
Один tag `[2]` не решает DNS-блок Taiga. Один tag `[1]` не решает browser challenge.
## Правильная проверка
@@ -122,6 +155,8 @@ ssh truenas_admin@mallexxx.duckdns.org \
После restart session должна восстановиться автоматически. Если она не появилась, смотреть `docker logs flaresolverr`; credentials не выводить в лог.
Автовосстановление можно проверить безопасно: удалить только session `prowlarr` через `sessions.destroy`, дождаться watcher и проверить `request.get` страницы RuTracker с признаком `id="logged-in-username"`.
## Восстановление quarantine
Если Prowlarr показывает старый `IndexerStatus`, сначала сделать backup SQLite. Остановить только Prowlarr, удалить только записи `IndexerStatus`, проверить `PRAGMA quick_check`, запустить и выполнить реальный search. Не удалять `prowlarr.db` и не считать health единственным тестом.
@@ -132,5 +167,7 @@ ssh truenas_admin@mallexxx.duckdns.org \
- FlareSolverr session `prowlarr` создаётся с proxy и pre-login.
- Прямой запрос через session получает `bb_session`.
- Реальный Prowlarr search RuTracker возвращает результаты.
- После полного restart: RuTracker — 50 результатов без ошибок; Kinozal — 14 результатов без ошибок.
- Три последовательных proxy-запроса получают один egress-IP.
- Искусственно удалённая FlareSolverr session автоматически восстановлена и снова logged-in.
- Ошибки Lidarr/SkyHook не относятся к FlareSolverr; их routing описан в [[family/how-to/arr-stack-taiga]].