5.5 KiB
title, created, updated, type, namespace, tags, related
| title | created | updated | type | namespace | tags | related | ||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| FlareSolverr на TrueNAS Taiga | 2026-09-20 | 2026-09-29 | tech | personal |
|
|
FlareSolverr на TrueNAS Taiga
Рабочая документация FlareSolverr для arr-стека Taiga. Общая эксплуатация стека находится в family/how-to/arr-stack-taiga. Kraken здесь не описывается.
Рабочая схема
Prowlarr
└─ tags [proxy, flaresolverr]
└─ FlareSolverr :8191
└─ Chrome session prowlarr
└─ socks5://vless-proxy:1080
└─ RuTracker
Файлы на TrueNAS:
/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 при каждом старте:
- ждёт FlareSolverr
/health; - удаляет старую session
prowlarr, если она есть; - создаёт
prowlarrсsocks5://vless-proxy:1080; - читает credentials RuTracker из
prowlarr.dbчерез SQLite URImode=ro&immutable=1; - делает pre-login через FlareSolverr;
- оставляет основной процесс FlareSolverr работать.
SQLite монтируется read-only. Обычный sqlite3.connect('/prowlarr.db') на read-only mount может упасть с unable to open database file; нужен именно immutable=1.
Compose-настройки
Минимально необходимые параметры:
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:
proxy tag = [1]
flaresolverr tag = [2]
RuTracker tags = [1,2]
FlareSolverr requestTimeout = 180 seconds
Один tag [2] не решает DNS-блок Taiga. Один tag [1] не решает browser challenge.
Правильная проверка
Проверка session:
curl -fsS -H 'Content-Type: application/json' \
-d '{"cmd":"sessions.list"}' http://127.0.0.1:8191/v1
Должны быть status=ok и prowlarr.
Проверка login должна смотреть cookies, а не размер HTML:
solution.cookies содержит bb_session
Большая HTML-страница может быть страницей ошибки Chromium и не означает login.
Функциональная приёмка — реальный search Prowlarr:
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.
Диагностика
docker compose ps— контейнеры живы.curl /health— FlareSolverr отвечает.sessions.list— session существует.- Проверить
bb_sessionвsolution.cookies. - Проверить логи
vless-proxyнаrutracker.org:443. - Выполнить одиночный реальный search, не
testall.
Параллельный testall перегружает один Chrome и создаёт ложные timeout. Challenge может занимать больше минуты, поэтому timeout 60 секунд недостаточен.
Перезапуск
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.