[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

+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]].