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