137 lines
5.5 KiB
Markdown
Executable File
137 lines
5.5 KiB
Markdown
Executable File
---
|
||
title: FlareSolverr на TrueNAS Taiga
|
||
created: '2026-09-20'
|
||
updated: '2026-09-29'
|
||
type: tech
|
||
namespace: personal
|
||
tags: [flaresolverr, prowlarr, rutracker, taiga, truenas]
|
||
related:
|
||
- "[[family/how-to/arr-stack-taiga]]"
|
||
---
|
||
|
||
# FlareSolverr на TrueNAS Taiga
|
||
|
||
Рабочая документация FlareSolverr для arr-стека Taiga. Общая эксплуатация стека находится в [[family/how-to/arr-stack-taiga]]. Kraken здесь не описывается.
|
||
|
||
## Рабочая схема
|
||
|
||
```text
|
||
Prowlarr
|
||
└─ tags [proxy, flaresolverr]
|
||
└─ FlareSolverr :8191
|
||
└─ Chrome session prowlarr
|
||
└─ socks5://vless-proxy:1080
|
||
└─ RuTracker
|
||
```
|
||
|
||
Файлы на TrueNAS:
|
||
|
||
```text
|
||
/mnt/RED_2TB/docker/arr/docker-compose.yml
|
||
/mnt/RED_2TB/docker/arr/flaresolverr-entrypoint.sh
|
||
/mnt/RED_2TB/docker/arr/prowlarr/
|
||
```
|
||
|
||
## Почему нужен entrypoint
|
||
|
||
Одного `PROXY_URL` недостаточно. FlareSolverr применяет proxy при создании browser session. Если session создана до настройки proxy, последующие `request.get` с той же session продолжают работать без proxy.
|
||
|
||
Entrypoint при каждом старте:
|
||
|
||
1. ждёт FlareSolverr `/health`;
|
||
2. удаляет старую session `prowlarr`, если она есть;
|
||
3. создаёт `prowlarr` с `socks5://vless-proxy:1080`;
|
||
4. читает credentials RuTracker из `prowlarr.db` через SQLite URI `mode=ro&immutable=1`;
|
||
5. делает pre-login через FlareSolverr;
|
||
6. оставляет основной процесс FlareSolverr работать.
|
||
|
||
SQLite монтируется read-only. Обычный `sqlite3.connect('/prowlarr.db')` на read-only mount может упасть с `unable to open database file`; нужен именно `immutable=1`.
|
||
|
||
## Compose-настройки
|
||
|
||
Минимально необходимые параметры:
|
||
|
||
```yaml
|
||
environment:
|
||
- LOG_LEVEL=warning
|
||
- BROWSER_TIMEOUT=180000
|
||
- PROXY_URL=socks5://vless-proxy:1080
|
||
- TZ=Asia/Novosibirsk
|
||
shm_size: 1gb
|
||
restart: unless-stopped
|
||
```
|
||
|
||
Entrypoint и Prowlarr config directory подключаются read-only. Не хранить credentials или API keys в compose и Obsidian.
|
||
|
||
В Prowlarr для RuTracker:
|
||
|
||
```text
|
||
proxy tag = [1]
|
||
flaresolverr tag = [2]
|
||
RuTracker tags = [1,2]
|
||
FlareSolverr requestTimeout = 180 seconds
|
||
```
|
||
|
||
Один tag `[2]` не решает DNS-блок Taiga. Один tag `[1]` не решает browser challenge.
|
||
|
||
## Правильная проверка
|
||
|
||
Проверка session:
|
||
|
||
```bash
|
||
curl -fsS -H 'Content-Type: application/json' \
|
||
-d '{"cmd":"sessions.list"}' http://127.0.0.1:8191/v1
|
||
```
|
||
|
||
Должны быть `status=ok` и `prowlarr`.
|
||
|
||
Проверка login должна смотреть cookies, а не размер HTML:
|
||
|
||
```text
|
||
solution.cookies содержит bb_session
|
||
```
|
||
|
||
Большая HTML-страница может быть страницей ошибки Chromium и не означает login.
|
||
|
||
Функциональная приёмка — реальный search Prowlarr:
|
||
|
||
```bash
|
||
curl -H "X-Api-Key: $PROWLARR_KEY" \
|
||
'http://127.0.0.1:9696/api/v1/search?query=radiohead&type=search&indexerIds=1'
|
||
```
|
||
|
||
`POST /api/v1/indexer/test` не использовать как единственное доказательство: при передаче объекта из API password может быть `********`, что даёт ложный `Auth Failed`.
|
||
|
||
## Диагностика
|
||
|
||
1. `docker compose ps` — контейнеры живы.
|
||
2. `curl /health` — FlareSolverr отвечает.
|
||
3. `sessions.list` — session существует.
|
||
4. Проверить `bb_session` в `solution.cookies`.
|
||
5. Проверить логи `vless-proxy` на `rutracker.org:443`.
|
||
6. Выполнить одиночный реальный search, не `testall`.
|
||
|
||
Параллельный `testall` перегружает один Chrome и создаёт ложные timeout. Challenge может занимать больше минуты, поэтому timeout 60 секунд недостаточен.
|
||
|
||
## Перезапуск
|
||
|
||
```bash
|
||
ssh truenas_admin@mallexxx.duckdns.org \
|
||
'cd /mnt/RED_2TB/docker/arr && docker compose config -q && docker compose up -d --force-recreate flaresolverr'
|
||
```
|
||
|
||
После restart session должна восстановиться автоматически. Если она не появилась, смотреть `docker logs flaresolverr`; credentials не выводить в лог.
|
||
|
||
## Восстановление quarantine
|
||
|
||
Если Prowlarr показывает старый `IndexerStatus`, сначала сделать backup SQLite. Остановить только Prowlarr, удалить только записи `IndexerStatus`, проверить `PRAGMA quick_check`, запустить и выполнить реальный search. Не удалять `prowlarr.db` и не считать health единственным тестом.
|
||
|
||
## Итоговый рабочий результат
|
||
|
||
На 2026-09-29 после полного рестарта Taiga:
|
||
|
||
- FlareSolverr session `prowlarr` создаётся с proxy и pre-login.
|
||
- Прямой запрос через session получает `bb_session`.
|
||
- Реальный Prowlarr search RuTracker возвращает результаты.
|
||
- Ошибки Lidarr/SkyHook не относятся к FlareSolverr; их routing описан в [[family/how-to/arr-stack-taiga]].
|