Files
obsidian-vault/personal/plans/flaresolverr-taiga-deploy.md
T

157 lines
10 KiB
Markdown
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# FlareSolverr на Тайге + обход блокировок индексеров — план
> **Статус: ПЛАН СОСТАВЛЕН, ЖДЁТ «GO» АЛЕКСА. НИЧЕГО НЕ ИЗМЕНЕНО.**
> Поставлено 2026-09-28: «Ставь flaresolverr как на Кра́кене, запускай трекеры через прокси
> контейнер чтобы обойти блокировки». Связано: [[personal/plans/lidarr-taiga-and-indexer-unblock]],
> [[family/projects/media-toolbox-taiga]], [[family/how-to/arr-stack-kraken]],
> [[personal/tech/prowlarr-flaresolverr-cloudflare]].
## Разведка (2026-09-28, всё проверено на живой машине)
### Что УЖЕ сделано (не переделывать!)
Прошлый план (2026-09-26) предполагал два блока. **Блокер №2 (DNS) уже закрыт**, а с ним
и большая часть Фазы 0:
| Что | Факт 2026-09-28 |
|---|---|
| `vless-proxy` в `media_net` | ✅ есть, IP `172.16.17.6`, резолвится из prowlarr |
| Прокси в Prowlarr | ✅ `vless-socks5` (id=1), Socks5, host `vless-proxy`, port `1080` |
| Тег | ✅ `proxy` (id=1); навешен и на прокси, и на **все 6 индексеров** |
| Работоспособность прокси | ✅ `rutracker.org` → **301**, `nnmclub.to` → **200**, `kinozal.me` → **200** |
| URL индексеров | ✅ Kinozal/Kinozal(M) уже на `kinozal.me` (не мёртвый `.tv`) |
| Поиск через Prowlarr | ✅ RuTor 100 + Byrutor 6 на «matrix» |
`vless-proxy` **жив** (его outbound был мёртв после удаления VPS qentra.top — переключён).
### Что ОСТАЛОСЬ (суть задачи)
Остаточная проблема — **не DNS, а Cloudflare**. Прямой факт:
```
GET https://rutracker.org/forum/login.php через socks5h://vless-proxy:1080
→ <title>Just a moment...</title> + challenges.cloudflare.com ← JS-челлендж
```
`IndexerStatus` (без снятия): карантин до `2026-09-29T02:25Z` у id **1 (RuTracker)**, **5 (Kinozal)**,
**6 (Kinozal M)**. `initialFailure = 2026-05-20` (день деплоя).
**FlareSolverr на Тайге ОТСУТСТВУЕТ** (`docker ps -a | grep flare` → пусто).
### Риски, которые надо закрыть ЗАРАНЕЕ (грабли Кра́кена)
Из [[personal/tech/prowlarr-flaresolverr-cloudflare]] §2026-09-24 — там FlareSolverr ушёл
в **crash-loop**, Chrome не поднимался под chromedriver. Две причины хоста:
| Условие | Кра́кен (сломано) | Тайга (сейчас) | Действие |
|---|---|---|---|
| `/dev/shm` | 64 MB → Chrome падал | **64 MB** (`ShmSize=67108864`) | 🔴 задать `shm_size: 1gb` |
| swap | `/proc/swaps` пуст → пик старта убивал | **`/proc/swaps` пуст, Swap=0** | 🔴 поднять swap или принять риск |
| RAM | мало | 21 GB total, **5.6 GB available** | ✅ хватает |
| IPv6 | `::1 localhost` ломал | проверить | добавить `disable_ipv6=1` (как на Кра́кене, там не помогло, но безвредно) |
🔴 **Главное отличие от Кра́кена:** на Кра́кене FlareSolverr **проксирует через себя** и лезет
в трекер напрямую — но у Кра́кена нет DNS-блока. На Тайге **DNS-блок есть**, значит
**FlareSolverr сам должен ходить через `vless-proxy`** (иначе он получит NXDOMAIN и не поможет).
Это ключевой архитектурный пункт: у контейнера `flaresolverr` должен быть настроен upstream-прокси
на `vless-proxy:1080`.
Проверить, поддерживает ли образ env `HTTPS_PROXY`/`SOCKS_PROXY` — у FlareSolverr есть
`PROXY`-настройки через переменные окружения и/или поле в `request.get`. Если env не работает —
передавать `proxy: {url: "socks5://vless-proxy:1080"}` в теле запроса от Prowlarr (Prowlarr
умеет это в настройках прокси-элемента? проверить — у Socks5-прокси в Prowlarr есть только
host/port/username/password, поля «передать в FS» нет).
> ⚠️ **Открытый техвопрос №1 (блокирует выбор схемы):** как FlareSolverr узнает про `vless-proxy`.
> Вариант A — env `HTTPS_PROXY`/`HTTP_PROXY`. Вариант B — `?proxy=` в конфиге FS.
> Если ни то, ни другое — трекеры через FS всё равно получат NXDOMAIN, и схема не заработает.
> **Проверить ДО деплоя** (документация образа FlareSolverr v3.x).
## ПЛАН
### Фаза 0 — внешняя блокировка: ✅ ЗАКРЫТА (проверено выше)
Ничего делать не нужно. Осталось только снять карантин (Фаза 2).
### Фаза 1 — FlareSolverr контейнер
1. **Бэкап** `/mnt/RED_2TB/docker/arr/docker-compose.yml` → `~truenas_admin/`
(`cp docker-compose.yml ~truenas_admin/docker-compose.yml.bak-<ts>`).
Бэкап **самого compose** отдаёт сам: `/tmp` не годится (чистится).
2. Проверить схему проксирования FS (открытый вопрос №1) — **до** правки compose.
3. Добавить сервис в `/mnt/RED_2TB/docker/arr/docker-compose.yml`:
```yaml
flaresolverr:
image: ghcr.io/flaresolverr/flaresolverr:latest
container_name: flaresolverr
restart: unless-stopped
environment:
- LOG_LEVEL=warning # ← НЕ info: info пишет пароли трекеров в plaintext
- BROWSER_TIMEOUT=60000
- TZ=Asia/Novosibirsk
# + прокси-переменные для обхода DNS (если схема A):
# - HTTP_PROXY=socks5h://vless-proxy:1080
# - HTTPS_PROXY=socks5h://vless-proxy:1080
ports:
- "8191:8191"
networks:
- media_net
shm_size: 1gb # ← Кра́кен: 64 MB убивал Chrome
sysctls:
- net.ipv6.conf.all.disable_ipv6=1
```
⚠️ `shm_size` и `sysctls` — **в блок сервиса**, не в `environment`.
4. Поднять из правильной папки:
`cd /mnt/RED_2TB/docker/arr && docker compose up -d flaresolverr`
(не через временную копию compose — name-conflict, грабля Кра́кена).
5. **Проверка живого FS** (не UI, а HTTP):
```bash
docker exec prowlarr sh -c 'curl -s -X POST http://flaresolverr:8191/v1 \
-H "Content-Type: application/json" \
-d "{\"cmd\":\"request.get\",\"url\":\"https://rutracker.org/forum/index.php\",\"maxTimeout\":60000}"'
# ожидается: {"status":"ok", ... "solution":{...}} — НЕ "Challenge detected" в ответе
```
⚠️ Первый старт Chrome ~20-60 с. `docker logs flaresolverr` должен показать
`Challenge solved!`, а НЕ `session not created: cannot connect to chrome`.
**ПРИЁМКА ALEX:** `docker logs --tail 30 flaresolverr` → есть `Challenge solved!`.
### Фаза 2 — прокси-элемент в Prowlarr + снятие карантина
1. Добавить/обновить прокси в Prowlarr: Settings → Indexers → Add Proxy → **FlareSolverr**,
host `http://flaresolverr:8191`, tag `flaresolverr`. (`vless-socks5` остаётся отдельным
прокси для DNS-обхода; один индексер может иметь **оба** тега — проверить.)
2. Навесить тег `flaresolverr` на RuTracker(1), Kinozal(5), Kinozal(M)(6) — **тем же способом
через API**, что и `proxy` (GET → jq `.tags=[…]` → PUT). 🔴 Без одинакового тега на прокси
И индексере прокси молча не применяется.
3. Сбросить карантин: `POST /api/v1/indexer/testall`.
4. **ПРИЁМКА ALEX:** https://prowlarr.mallexxx.duckdns.org → Indexers → Test All → зелёные.
### Фаза 3 — проверка поиска
```bash
docker exec prowlarr sh -c 'printf "X-Api-Key: 35c8b3f497114076a6150ea0d9504845" > /tmp/h.txt'
docker exec prowlarr sh -c 'curl -s -G -H @/tmp/h.txt --data-urlencode "query=matrix" \
--data-urlencode "type=search" http://localhost:9696/api/v1/search' | \
python3 -c "import json,sys,collections; d=json.load(sys.stdin); \
print(collections.Counter(x['indexer'] for x in d))"
```
Ожидается: появляются RuTracker + Kinozal с ненулевым счётом.
**ПРИЁМКА ALEX:** поиск в UI Prowlarr по конкретному фильму → результат от RuTracker/Kinozal.
## Вопросы к Алексу
1. **Схема проксирования FlareSolverr** (открытый вопрос №1 выше): проверить env-переменные
или `proxy` в теле запроса — сделаю сам, не требует решения. Решение не нужно, если вариант A сработает.
2. **Swap на Тайге (Swap=0).** На Кра́кене именно мёртвый swap + 64 MB `/dev/shm` убили Chrome.
Варианты: (A) поднять `/var/swap` на Тайге (как на Кра́кене) — надёжнее; (B) рискнуть с одним
`shm_size: 1gb` и посмотреть. **Рекомендую A+C:** поднять swap И дать shm 1gb.
⚠️ Трогать swap — системное изменение, согласовать.
## История
- **2026-09-28** — разведка. Обнаружено: DNS-блокер УЖЕ закрыт (прокси настроен 2026-09-26),
остаточная проблема — Cloudflare на RuTracker/Kinozal. FlareSolverr отсутствует. Составлен план.
Ничего не изменено.