[2026-09-29] eagle: family/documents/vault-sync/2026-09-28-http402-balance-outage-3.md family/how-to/jellyfin-config.md family/how-to/lampac-torrents.md family/how-to/navidrome-truenas-android.md family/index.md family/plans/lidarr-artist-watchlist.md family/plans/music-jellyfin-lidarr-taiga.md family/projects/media-toolbox-taiga.md personal/tech/jellyfin-tags-cp1251-unreadable.md personal/tech/lampac-deployment.md
This commit is contained in:
1 parent
a32c0dbdae
commit
e224ac29c9
14 files changed
+20
-497
No files matched your search
@@ -1,473 +0,0 @@
|
||||
---
|
||||
title: '*arr Stack на Тайге — Setup & Config'
|
||||
namespace: family
|
||||
type: reference
|
||||
tags:
|
||||
- taiga
|
||||
- radarr
|
||||
- sonarr
|
||||
- prowlarr
|
||||
- jellyfin
|
||||
- arr
|
||||
- media
|
||||
- lidarr
|
||||
- dns
|
||||
- flaresolverr
|
||||
- cloudflare
|
||||
created: '2026-05-20'
|
||||
updated: '2026-09-28'
|
||||
status: deployed
|
||||
---
|
||||
# *arr Stack на Тайге — Setup & Config
|
||||
|
||||
> ⚠️ **STATE 2026-09-28 (конец сессии, аудит): SkyHook ✅ РАБОТАЕТ, но 2 дефекта открыты.**
|
||||
> Проверено живым `artist/lookup?term=Astrix` → **10 результатов** ⇒ блокер метаданных снят.
|
||||
> Остальные факты: Prowlarr `health: []` + карантин пуст; Radarr `health: []`; Navidrome 1207
|
||||
> артистов / 7791 трек; rootfolder `/storage/Music` accessible, 911 ГБ; 7 доменов отвечают.
|
||||
> 🔴 **ДЕФЕКТ 1:** RuTracker(1) + Kinozal(5) + Kinozal(M)(6) — `indexer/test` → **пустой ответ даже
|
||||
> при 90 с**; работают NoNaMe/RuTor/Byrutor. FS жив (3.5.2, `status: ok`, сессия `["prowlarr"]` есть),
|
||||
> теги `[1,2]` верны, карантина нет. **Первый шаг диагностики:** `docker exec flaresolverr ps aux |
|
||||
> grep chromium` → искать `--proxy-server=socks5://vless-proxy:1080`.
|
||||
> 🔴 **ДЕФЕКТ 2:** Lidarr → Transmission `Failed to authenticate` (креды download-client пустые;
|
||||
> Transmission требует логин). Побочно `musicCategory` читается пустой — проверить, не потерялась ли.
|
||||
> **Артисты в Lidarr: 1 (Radiohead)** — 150 позиций из [[family/plans/lidarr-artist-watchlist]]
|
||||
> **ещё не поставлены**.
|
||||
> Полный разбор — [[family/plans/lidarr-taiga-deploy]] §«АУДИТ ВСЕГО СТЕКА 2026-09-28».
|
||||
|
||||
> ✅ **STATE 2026-09-28 (вечер, финал): LIDARR РАБОЧИЙ — приёмка закрыта.**
|
||||
> Live: **`https://lidarr.mallexxx.duckdns.org`** → HTTP 200, TLS Let's Encrypt, `health` → `[]`.
|
||||
> Контейнер `lidarr` **v3.1.0.4875-ls42**, порт 8686, uid 950, `media_net` + `caddy_default`.
|
||||
> API-ключ `166654ac3f054096ae0e8393fb1bf940`. Compose — в общем `/mnt/RED_2TB/docker/arr/docker-compose.yml`.
|
||||
> Root folder `/storage/Music` (accessible) — **та же папка, что читает Navidrome**.
|
||||
> Download client Transmission (тест связи 200), naming: `{Artist Name}/{Album Title}/{track:00} - {Track Title}`.
|
||||
> Prowlarr: Application `Lidarr` id=3 `fullSync`, `syncCategories=[3000…3060]`.
|
||||
> Проброшен `NoNaMe Club (Prowlarr)`.
|
||||
> 🔴 **`health: []` ≠ «работает»** — проверять поиск. Проверено end-to-end:
|
||||
> `artist/lookup?term=radiohead` → **10 результатов**, артист **Radiohead добавлен** (id=1),
|
||||
> `/release?artistId=1` → **23 раздачи** FLAC (seeders 3–7).
|
||||
> 🔑 **Как снят SkyHook-блокер (главный вывод):** `api.lidarr.audio` за Cloudflare →
|
||||
> прямой запрос с IP Тайги **403**, через `vless-proxy` **200**. FlareSolverr тут НЕ помогает
|
||||
> (Lidarr ходит в SkyHook сам). ⚠️ **env `HTTP_PROXY`/`HTTPS_PROXY` Lidarr НЕ ЧИТАЕТ** —
|
||||
> .NET-клиент SkyHook их игнорирует. Рабочий фикс — **встроенный прокси-конфиг**:
|
||||
> `PUT /api/v1/config/host/1` c `proxyEnabled=true`, `proxyType=http`,
|
||||
> `proxyHostname=vless-proxy`, `proxyPort=1081`, bypass `localhost,127.0.0.1,vless-proxy`.
|
||||
> Скрипт `/tmp/lidarr_set_proxy.py`. ⚠️ Порт **1081** (HTTP), не 1080 (SOCKS5).
|
||||
> 🔴 **Индексеры для музыки (проверено 2026-09-28):** аудио отдают только **RuTracker(1)**,
|
||||
> **NoNaMe(4)**, **Kinozal(5,6)**. **RuTor и Byrutor — `music-search available="no"`, музыки НЕТ.**
|
||||
> ✅ Все 4 аудио-индексера разблокированы 2026-09-28 (FlareSolverr) — [[personal/tech/flaresolverr-taiga]].
|
||||
> Полный разбор, питфоллы и креды Transmission — [[family/plans/lidarr-taiga-deploy]] §ФАКТИЧЕСКОЕ СОСТОЯНИЕ.
|
||||
> ⏳ **Остаток (не блокирует Lidarr): пароль RuTracker неверен** (`Auth Failed`, форма логина
|
||||
> возвращается) → нужен верный пароль от Alex; Radarr/Sonarr `RemotePathMappingCheck` —
|
||||
> каталоги `Downloads/{radarr,sonarr}` созданы, нужен рестарт Radarr/Sonarr.
|
||||
|
||||
> ✅ **STATE 2026-09-28 (вечер): ИНДЕКСЕРЫ 6/6 РАБОЧИЕ — FlareSolverr развёрнут.**
|
||||
> Все блокеры сняты. Было 3/6, стало 6/6, `health` и `indexerstatus` → `[]` (пусто).
|
||||
> Поиск «matrix» → **256 результатов** (RuTor 100, RuTracker 50, NoNaMe 50, Kinozal 50, Byrutor 6).
|
||||
> **RuTracker впервые `valid` за всё время стека (с 2026-05-20).** Карантины id 1/5/6 сняты.
|
||||
> Схема: два прокси-элемента в Prowlarr — `vless-socks5` (DNS-блок) + `flaresolverr` (Cloudflare),
|
||||
> теги `[1,2]` на CF-индексеры. FlareSolverr сам ходит через `vless-proxy` (`PROXY_URL`).
|
||||
> Контейнер `flaresolverr` в `arr/docker-compose.yml`, `8191`, `shm_size: 1gb`, `LOG_LEVEL=warning`.
|
||||
> 🔴 Главный питфолл: FS-сессия `prowlarr`, созданная ДО появления `PROXY_URL`, навсегда
|
||||
> остаётся без прокси → `ERR_NAME_NOT_RESOLVED` → ложное «blocked by CloudFlare».
|
||||
> Лечится `sessions.destroy`. Swap НЕ нужен (RAM 21 GB) — Alex отклонил.
|
||||
> Полный разбор, все питфоллы и команды — [[personal/tech/flaresolverr-taiga]].
|
||||
|
||||
> 🔴 **ПИТФОЛЛ 2026-09-28: `429 TooManyRequests` от Prowlarr ≠ rate limit.** Это **карантин**
|
||||
> (`disabledTill`) — Prowlarr отдаёт 429 на ЛЮБОЙ запрос к индексеру, пока тот в карантине.
|
||||
> Лечится `POST /api/v1/indexer/testall` (сбрасывает `disabledTill`), **не ожиданием**.
|
||||
> Проверять `GET /api/v1/indexerstatus`. Тот же симптом сбил диагностику синка Prowlarr→Lidarr.
|
||||
>
|
||||
> 🔴 **ПИТФОЛЛ 2026-09-28: Transmission требует логин/пароль.** `rpc-authentication-required: true`,
|
||||
> юзер `transmission_admin`. Креды — в env `/mnt/RED_2TB/docker/transmission/docker-compose.yml`
|
||||
> (`USER`/`PASS`). Без них любой новый download client даёт `400 Authentication failure`.
|
||||
>
|
||||
> 🔴 **ПИТФОЛЛ 2026-09-28: запись в root-owned Caddyfile.** `docker cp` на bind-mounted файле
|
||||
> падает `device or resource busy`; `docker run alpine -v /:/host:rw` блокируется апрувом.
|
||||
> РАБОЧИЙ путь: `docker exec -i caddy sh -c 'cat > /etc/caddy/Caddyfile' < /tmp/new.txt`.
|
||||
|
||||
> ✅ **STATE 2026-09-27 (v6, ночь): NAVIDROME РАЗВЁРНУТ — музыкальный сервер для `Music/`.**
|
||||
> Контейнер **`navidrome`** (v0.64.2) на порту **4533**, домен **`https://music.mallexxx.duckdns.org`**
|
||||
> (Caddy, Let's Encrypt). Compose — `/mnt/RED_2TB/docker/navidrome/docker-compose.yml`.
|
||||
> Музыка смонтирована **`rw`** (`/mnt/RED_2TB/storage/Music` → `/music`) по явному решению Alex.
|
||||
> **Скан завершён: 8043 трека.** Бэкап-папки исключены через `/storage/Music/.ndignore`.
|
||||
> ✅ **Главное: Navidrome читает ТЕГИ, папки игнорирует** — артисты `ДДТ`, `Красная Плесень`
|
||||
> из тегов, а не `!Rock&Folk` / `z Другое`. Баг Jellyfin #18162 здесь отсутствует.
|
||||
> План и все питфоллы деплоя — [[family/how-to/navidrome-truenas-android]] §v4.
|
||||
> **Jellyfin остаётся для ВИДЕО** (6 библиотек, музыка там не создаётся).
|
||||
|
||||
> ⚠️ **Jellyfin-библиотека музыки НЕ создаётся:** попытка 2026-09-27 провалена (баг #18162,
|
||||
> навигация по папкам) → полный откат, БД восстановлена. Музыка → только Navidrome.
|
||||
|
||||
> ✅ **STATE 2026-09-27 (v5, вечер): Music-библиотека УДАЛЕНА, БД Jellyfin ВОССТАНОВЛЕНА.**
|
||||
> Контейнеры **живы** (prowlarr/radarr/sonarr/jellyfin/transmission, uid 950, media_net на месте).
|
||||
> **Индексеры: 3/6 рабочих** (RuTor/Byrutor/NoNaMe ✅; RuTracker/Kinozal — Cloudflare).
|
||||
> Итог по Music: библиотека создавалась, скан прошёл (7826 треков, бэкап-папки исключены через
|
||||
> `.ignore`), **приёмка Alex в UI провалена** (навигация по папкам) → **полный откат**:
|
||||
> `DELETE /Library/VirtualFolders` + восстановление БД из
|
||||
> `/home/truenas_admin/jellyfin-config-bak-20260926-203007.tar.gz` (MD5 `b71b5d659a1262fa98b85a6ab0003f24`).
|
||||
> **Сейчас: 6 библиотек, Audio=0, MusicArtist=0.**
|
||||
> 🔴 **ПРИЧИНА провала: в файлах ОТСУТСТВУЕТ фрейм `TPE2` (albumartist)** — Jellyfin в music-библиотеке
|
||||
> строит иерархию по `TPE2`, при его отсутствии уходит в fallback на папки и не читает `TPE1`.
|
||||
> Теги **уже в UTF-16 с BOM**, диагноз «CP1251» **опровергнут**. См. [[personal/tech/jellyfin-tags-cp1251-unreadable]].
|
||||
> Ремонт (простановка `TPE2` = `TPE1` по 7826 файлам) НЕ начат.
|
||||
> **Lidarr НЕ установлен.** План — [[family/plans/music-jellyfin-lidarr-taiga]] (v5).
|
||||
|
||||
## Архитектура
|
||||
|
||||
Prowlarr (9696) → Radarr (7878) + Sonarr (8989) → Transmission (9091) → Jellyfin (8096)
|
||||
Navidrome (4533) ← `/storage/Music` — ✅ развёрнут 2026-09-27, читает ТЕГИ (не папки)
|
||||
⏳ Lidarr (8686) — план составлен 2026-09-28, ждёт «go». Связка с NAVIDROME.
|
||||
→ [[family/plans/lidarr-taiga-deploy]] §2026-09-28
|
||||
|
||||
Staging папки (`radarr/`, `sonarr/`) невидимы в Jellyfin.
|
||||
Router скрипт создаёт симлинки из staging → категоризированные библиотеки по NFO (genre + mpaa).
|
||||
|
||||
```
|
||||
Transmission → /mnt/storage/Downloads
|
||||
Radarr импортирует → /storage/radarr/<Title>/
|
||||
Sonarr импортирует → /storage/sonarr/<Title>/
|
||||
router.py (--apply)
|
||||
movies/ cartoons/ series/
|
||||
cartoons-series/ documentaries/ documentaries-series/
|
||||
↓
|
||||
Jellyfin
|
||||
```
|
||||
|
||||
## Web UI (HTTPS через Caddy)
|
||||
|
||||
| Сервис | URL |
|
||||
|--------|-----|
|
||||
| Radarr | https://radarr.mallexxx.duckdns.org |
|
||||
| Sonarr | https://sonarr.mallexxx.duckdns.org |
|
||||
| Prowlarr | https://prowlarr.mallexxx.duckdns.org |
|
||||
| Jellyfin | https://jellyfin.mallexxx.duckdns.org |
|
||||
| **Navidrome** | **https://music.mallexxx.duckdns.org** — ✅ **развёрнут 2026-09-27** (музыка) |
|
||||
| Transmission | https://transmission.mallexxx.duckdns.org (уже был) |
|
||||
|
||||
| Lidarr | https://lidarr.mallexxx.duckdns.org — ⏳ **НЕ установлен**; план составлен 2026-09-28, ждёт «go» ([[family/plans/lidarr-taiga-deploy]] §2026-09-28) |
|
||||
|
||||
Caddy: subdomain-based роутинг, без URL Base. Let's Encrypt автоматически.
|
||||
|
||||
> Правка Caddyfile — **только через alpine-контейнер** (Caddyfile root-owned, `truenas_admin`
|
||||
> писать не может). Отправлять **весь файл**, не патч. См. skill `truenas-caddy-service-deploy`.
|
||||
|
||||
## Docker
|
||||
|
||||
**Compose:** `/mnt/RED_2TB/docker/arr/docker-compose.yml`
|
||||
**Config dirs:** `/mnt/RED_2TB/docker/arr/{prowlarr,radarr,sonarr,jellyfin}/`
|
||||
**PUID/PGID:** 921/921 (user `transmission`, тот же что владеет `/storage/`)
|
||||
|
||||
### Сети
|
||||
|
||||
| Контейнер | Сети |
|
||||
|-----------|------|
|
||||
| prowlarr | media_net + caddy_default |
|
||||
| radarr | media_net + caddy_default |
|
||||
| sonarr | media_net + caddy_default |
|
||||
| jellyfin | caddy_default |
|
||||
| transmission | transmission_default + **media_net** (персистентно в compose) |
|
||||
| vless-proxy | hermes_taiga_net + **media_net** (персистентно в compose, добавлено 2026-09-26) |
|
||||
|
||||
> ✅ **ПОПРАВКА 2026-09-26 (проверено на живой машине):** строка про `vless-proxy` в `media_net` была
|
||||
> **НЕВЕРНА.** Факт на момент начала сессии: `docker inspect vless-proxy` → только `hermes_taiga_net`
|
||||
> (172.16.15.2). `docker network inspect media_net` → участники `prowlarr radarr transmission sonarr`.
|
||||
> `docker exec prowlarr getent hosts vless-proxy` → NO DNS.
|
||||
> Следствие: прокси-маршрут для индексеров, описанный в §«Prowlarr — прокси», **никогда не работал**.
|
||||
>
|
||||
> ✅ **ИСПРАВЛЕНО 2026-09-26:** `media_net` добавлена в `/mnt/RED_2TB/docker/vless-proxy/docker-compose.yml`
|
||||
> (persistent) + контейнер пересоздан `--force-recreate`. Теперь `vless-proxy` = `172.16.17.6` в `media_net`,
|
||||
> `getent hosts vless-proxy` из prowlarr/radarr резолвится. Полный разбор — [[family/plans/lidarr-taiga-deploy]] Фаза 0.
|
||||
>
|
||||
> ⚠️ **ПОПРАВКА PUID/PGID:** `921/921` устарело (см. строку выше про PUID 921 — артефакт до
|
||||
> restore-инцидента). Факт 2026-09-26: **все сервисы стека под uid 950**, `PUID=950 PGID=950`
|
||||
> в compose. `921` — старый uid transmission, не используется.
|
||||
|
||||
`media_net` — внешняя сеть, создана вручную: `docker network create media_net`
|
||||
|
||||
## Хранилище
|
||||
|
||||
**Host:** `/mnt/RED_2TB/storage/` → внутри контейнеров: `/storage/`
|
||||
**Transmission mount:** `/mnt/RED_2TB/storage/` → `/mnt/storage/`
|
||||
|
||||
### Папки
|
||||
|
||||
| Папка | Назначение | Jellyfin |
|
||||
|-------|-----------|----------|
|
||||
| `radarr/` | Radarr root (staging) | ❌ |
|
||||
| `sonarr/` | Sonarr root (staging) | ❌ |
|
||||
| `Movies/` | Фильмы (симлинки + старый контент) | ✅ Movies |
|
||||
| `Cartoons/` | Мультики (симлинки + старый контент) | ✅ Cartoons |
|
||||
| `series/` | Сериалы | ✅ Series |
|
||||
| `cartoons-series/` | Мультсериалы | ✅ Cartoon Series |
|
||||
| `documentaries/` | Документалки | ✅ Documentaries |
|
||||
| `documentaries-series/` | Документальные сериалы | ✅ Documentary Series |
|
||||
| `Music/` | Музыка (8043 трека в Navidrome, 9 категорий) | ✅ **Navidrome** (не Jellyfin!) |
|
||||
| `Downloads/` | Торренты (Transmission) | ❌ |
|
||||
|
||||
Все папки: uid=921, gid=921, NFSv4 ACL через midclt.
|
||||
|
||||
> 📌 **`Music/` на 2026-09-26:** файлы лежат, `/storage` уже смонтирован в контейнер (ro), но виртуальной папки Music в Jellyfin **нет**. Разведка + 6-шаговый план (бэкап → `POST /Library/VirtualFolders` → скан → приёмка) — [[family/how-to/jellyfin-config]] §«Taiga (TrueNAS)». Доп. монтирование НЕ требуется.
|
||||
> ⚠️ Структура `Music/` — плоские категории (`!Rock&Folk`, `!Retro`, `!Классика`), НЕ `Artist/Album` → для `collectionType=music` Jellyfin раскладывает по тегам, риск «Unknown Artist».
|
||||
|
||||
## API ключи
|
||||
|
||||
| Сервис | Prefix |
|
||||
|--------|--------|
|
||||
| Radarr | `51e201f2` |
|
||||
| Sonarr | `b1eb9cdd` |
|
||||
| Prowlarr | `35c8b3f4` |
|
||||
| Jellyfin | `eaglesetup2026taiga` |
|
||||
|
||||
Получить полный ключ: `docker exec <svc> grep ApiKey /config/config.xml`
|
||||
Jellyfin token создан вручную через sqlite — хранится в `/mnt/RED_2TB/docker/arr/jellyfin/data/data/jellyfin.db`.
|
||||
|
||||
## Remote Path Mapping (Radarr + Sonarr) — ⚠️ НЕ ПРИМЕНЁН, health жалуется
|
||||
|
||||
Transmission монтирует `/mnt/RED_2TB/storage/` → `/mnt/storage/`
|
||||
Radarr/Sonarr монтируют `/mnt/RED_2TB/storage/` → `/storage/`
|
||||
|
||||
> 🔴 **ФАКТ 2026-09-26: этого маппинга в API Radarr/Sonarr НЕТ.** Health обоих даёт:
|
||||
> ```
|
||||
> RemotePathMappingCheck error
|
||||
> "download client Transmission places downloads in /storage/Downloads/radarr
|
||||
> but this directory does not appear to exist inside the container"
|
||||
> ```
|
||||
>
|
||||
> **Фактическая причина (опровергает предположение ниже):** Transmission **не раскладывает** по
|
||||
> `Downloads/radarr` — download-dir плоский:
|
||||
> ```json
|
||||
> {"download-dir": "/mnt/storage/Downloads",
|
||||
> "incomplete-dir": "/mnt/storage/Downloads/transmission/incomplete",
|
||||
> "script-torrent-done-enabled": false, "rpc-url": "/transmission/",
|
||||
> "rpc-whitelist": "172.16.*.*"}
|
||||
> ```
|
||||
> Radarr ОЖИДАЕТ подкаталог категории (`/storage/Downloads/radarr`) — его нет.
|
||||
> Разбирать в Фазе 4 плана [[family/plans/lidarr-taiga-deploy]].
|
||||
|
||||
Предполагаемый маппинг в каждом (задумано, но не выставлено):
|
||||
- host: `transmission`
|
||||
- remotePath: `/mnt/storage/Downloads/`
|
||||
- localPath: `/storage/Downloads/`
|
||||
|
||||
## 🔴 Индексеры НЕ РАБОТАЮТ: DNS-фильтр провайдера (найдено 2026-09-26)
|
||||
|
||||
**Все 6 индексеров в карантине (`disabledTill` = +24 ч), `initialFailure = 2026-05-20`**
|
||||
(дата первоначального деплоя) → **не работали ни одного дня.**
|
||||
|
||||
```
|
||||
GET /api/v1/health (prowlarr) →
|
||||
"Indexers unavailable due to failures for more than 6 hours:
|
||||
RuTracker, RuTor, NoNaMe Club, Kinozal, Kinozal (M)"
|
||||
```
|
||||
|
||||
**Корень — NXDOMAIN на трекеры, и с роутера, и с 8.8.8.8:**
|
||||
|
||||
```bash
|
||||
nslookup rutracker.org 192.168.2.2 # роутер → NXDOMAIN
|
||||
nslookup rutracker.org 8.8.8.8 # Google → NXDOMAIN
|
||||
nslookup google.com 192.168.2.2 # → OK
|
||||
```
|
||||
|
||||
| Домен | DNS |
|
||||
|---|---|
|
||||
| `rutracker.org` | ❌ NXDOMAIN |
|
||||
| `rutor.info` | ❌ NXDOMAIN |
|
||||
| `kinozal.tv` | ❌ NXDOMAIN |
|
||||
| `nnmclub.to` | ❌ NXDOMAIN |
|
||||
| `byrutgame.org` | ✅ 185.200.198.230 |
|
||||
| `google.com` | ✅ |
|
||||
|
||||
> Это **не Pi-hole и не роутер** (8.8.8.8 тоже NXDOMAIN) — блок на стороне аплинка Тайги.
|
||||
> Это **другой** класс, чем задокументированные «Cloudflare 403 на indexers.prowlarr.com»
|
||||
> и «RuTracker Turnstile»: здесь DNS не отдаёт IP вообще.
|
||||
|
||||
Прокси для обхода описан в §«Prowlarr — прокси». **✅ 2026-09-26: прокси-маршрут починен** —
|
||||
3 из 6 индексеров работают. Полный разбор — [[family/plans/lidarr-taiga-deploy]] Фаза 0.
|
||||
|
||||
### ✅ Перепроверено 2026-09-28 (важно: часть «блокеров» закрыта)
|
||||
|
||||
| Проверка | Результат |
|
||||
|---|---|
|
||||
| `vless-proxy` в `media_net` | ✅ `172.16.17.6`, `getent hosts vless-proxy` из prowlarr OK |
|
||||
| `curl -x socks5h://vless-proxy:1080 https://rutracker.org/` | ✅ **301** |
|
||||
| `… https://nnmclub.to/` | ✅ **200** |
|
||||
| `… https://kinozal.me/` | ✅ **200** |
|
||||
| `… https://kinozal.tv/` | ❌ **000** (домен мёртв — подтверждено) |
|
||||
| `GET /api/v1/indexerproxy` | `vless-socks5` id=1, Socks5, host `vless-proxy`, port 1080, tags=[1] |
|
||||
| `GET /api/v1/tag` | `proxy` id=1 (таблица Tags **не пуста** — поправка к записи 2026-09-26) |
|
||||
| `GET /api/v1/indexer` | все 6 `enable=true`, **tags=[1]** (до правки 2026-09-28) |
|
||||
| `GET /api/v1/search?query=matrix` | RuTor **100**, Byrutor **6** (до FS) |
|
||||
| `GET /api/v1/indexerstatus` | карантин: id **1, 5, 6** (`disabledTill` +24 ч); 2/3/4 чисты |
|
||||
| `docker ps -a` grep flare | **NONE** — FlareSolverr отсутствовал до 2026-09-28 |
|
||||
|
||||
**Итог на тот момент: остаточная проблема — ТОЛЬКО Cloudflare**, DNS-блок снят прокси-маршрутом.
|
||||
`GET rutracker.org/forum/login.php` через прокси → `<title>Just a moment...</title>`
|
||||
(+`challenges.cloudflare.com`) = JS-челлендж, который Prowlarr сам не проходит.
|
||||
|
||||
✅ **ЗАКРЫТО 2026-09-28:** FlareSolverr развёрнут → **6/6 индексеров valid**, карантины сняты,
|
||||
поиск 256. Полный разбор — [[personal/tech/flaresolverr-taiga]].
|
||||
|
||||
🔴 **`429 TooManyRequests` от Prowlarr = карантин, не rate-limit.** Снимается
|
||||
`POST /api/v1/indexer/testall` (или одиночными тестами), НЕ ожиданием.
|
||||
Проверять `GET /api/v1/indexerstatus`.
|
||||
|
||||
⚠️ **Питфолл API на Тайге (проверено 2026-09-28):** передача `X-Api-Key` через вложенный
|
||||
`docker exec … sh -c 'curl -H "X-Api-Key: …"'` съедает кавычки → **401 Unauthorized**,
|
||||
хотя ключ верный. 🔴 **Рабочий приём — файл-заголовок:**
|
||||
```bash
|
||||
docker exec prowlarr sh -c 'printf "X-Api-Key: 35c8b3f497114076a6150ea0d9504845" > /tmp/h.txt; \
|
||||
curl -s -H @/tmp/h.txt http://localhost:9696/api/v1/indexer'
|
||||
```
|
||||
Внутри контейнера `python3` НЕТ (только `curl` есть в linuxserver-образах) — JSON разбирать
|
||||
хостовым `python3` через файл: `docker exec … > /tmp/ix.json` → `python3 -c "…"`.
|
||||
Также `wget` из busybox не умеет `-H` с кавычками — предпочитать `curl -H @file`.
|
||||
|
||||
## Prowlarr — прокси для заблокированных индексеров
|
||||
|
||||
`vless-proxy` доступен в `media_net` как `vless-proxy` (SOCKS5 **1080**, HTTP **1081**).
|
||||
|
||||
Настройка (финал 2026-09-28):
|
||||
- Прокси `vless-socks5` (id=1), Type `Socks5`, Host `vless-proxy`, Port `1080` — тег `proxy` (id=1)
|
||||
- Прокси `flaresolverr` (id=2), Type `FlareSolverr`, Host `http://flaresolverr:8191/`,
|
||||
**`requestTimeout=180`** — тег `flaresolverr` (id=2)
|
||||
- **Индексерам за CF нужны ОБА тега `[1,2]`**: id 1, 4, 5, 6. id 2, 3 → `[1]`.
|
||||
|
||||
> ✅ **ИСПРАВЛЕНО 2026-09-26.** До этого таблица `Tags` в `prowlarr.db` была **ПУСТА**,
|
||||
> а `Indexers.Tags` ссылался на висячий id `[1]`; `IndexerProxies.Tags` = `[]`.
|
||||
> Прокси физически не был привязан ни к чему → все индексеры падали в NXDOMAIN.
|
||||
>
|
||||
> **Результат `POST /api/v1/indexer/testall` (2026-09-26):**
|
||||
>
|
||||
> | id | Индексер | Статус |
|
||||
> |---|---|---|
|
||||
> | 1 | RuTracker | ❌ `403 Cloudflare "Just a moment..."` на `/forum/login.php` |
|
||||
> | 2 | RuTor | ✅ OK |
|
||||
> | 3 | Byrutor | ✅ OK |
|
||||
> | 4 | NoNaMe Club | ✅ OK |
|
||||
> | 5 | Kinozal | ❌ `blocked by CloudFlare Protection` |
|
||||
> | 6 | Kinozal (M) | ❌ `blocked by CloudFlare Protection` |
|
||||
>
|
||||
> RuTracker: `GET /forum/index.php` → **200**, `POST /forum/login.php` → **403 Cloudflare JS-challenge**.
|
||||
> Остаточная проблема — Cloudflare, НЕ DNS.
|
||||
>
|
||||
> ✅ **РЕШЕНО 2026-09-28: FlareSolverr развёрнут, все 6 индексеров valid.**
|
||||
> Прокси-элемент `flaresolverr` (id=2, host `http://flaresolverr:8191/`, `requestTimeout=180`),
|
||||
> теги `[1,2]` на RuTracker/NoNaMe/Kinozal/Kinozal(M).
|
||||
> FS ходит через `vless-proxy` через env **`PROXY_URL=socks5://vless-proxy:1080`**.
|
||||
> Пруф: `rutracker.org/forum/login.php` → `Challenge solved!` 200.
|
||||
> `health` → `[]`, `indexerstatus` → `[]`, поиск «matrix» → **256 результатов**.
|
||||
> Полный разбор, 5 питфоллов и команды — [[personal/tech/flaresolverr-taiga]].
|
||||
>
|
||||
> 🔴 **Важно для RuTracker/Kinozal: `kinozal.tv` МЁРТВ** (NXDOMAIN даже на выходной стороне прокси) —
|
||||
> использовать `kinozal.me` (через прокси → 200).
|
||||
|
||||
## Индексеры (те же что на Кракене)
|
||||
|
||||
| id | Имя | Примечание |
|
||||
|-----|-----|-----------|
|
||||
| 1 | RuTracker | через прокси **+ FlareSolverr**; ✅ работает (2026-09-28) |
|
||||
| 2 | RuTor | через прокси; ✅ работает |
|
||||
| 3 | Byrutor | через прокси; ✅ работает; `enableRss: false` |
|
||||
| 4 | NoNaMe Club | через прокси; ✅ работает (FS-тег не навешен — не требуется) |
|
||||
| 5 | Kinozal | через прокси **+ FlareSolverr**; ✅ `Challenge solved!` на `kinozal.me/browse.php` |
|
||||
| 6 | Kinozal (M) | через прокси **+ FlareSolverr**; ✅ из 6/6 ключевое — `isValid=true` |
|
||||
|
||||
`preferMagnetUrl: true` для всех → нет дневного лимита на .torrent.
|
||||
|
||||
## router.py
|
||||
|
||||
**Скрипт:** `/mnt/RED_2TB/docker/arr/media-pipeline/router.py`
|
||||
Адаптация kraken-версии с изменёнными путями:
|
||||
|
||||
```python
|
||||
MEDIA_BASE = Path("/mnt/RED_2TB/storage")
|
||||
SOURCES = [
|
||||
("movie", MEDIA_BASE / "radarr"),
|
||||
("series", MEDIA_BASE / "sonarr"),
|
||||
]
|
||||
TARGETS = {
|
||||
"movies": MEDIA_BASE / "Movies",
|
||||
"series": MEDIA_BASE / "series",
|
||||
"cartoons": MEDIA_BASE / "Cartoons",
|
||||
"cartoons-series": MEDIA_BASE / "cartoons-series",
|
||||
"documentaries": MEDIA_BASE / "documentaries",
|
||||
"documentaries-series": MEDIA_BASE / "documentaries-series",
|
||||
}
|
||||
JELLYFIN_URL = "http://jellyfin:8096" # или по IP
|
||||
```
|
||||
|
||||
Запуск вручную (авто-хука нет):
|
||||
```bash
|
||||
ssh truenas_admin@mallexxx.duckdns.org "python3 /mnt/RED_2TB/docker/arr/media-pipeline/router.py"
|
||||
# проверить, затем:
|
||||
ssh truenas_admin@mallexxx.duckdns.org "python3 /mnt/RED_2TB/docker/arr/media-pipeline/router.py --apply"
|
||||
```
|
||||
|
||||
## Отличия от Кракена
|
||||
|
||||
| | Kraken | Taiga |
|
||||
|--|--------|-------|
|
||||
| Reverse proxy | nginx path-based (`/sonarr`) | Caddy subdomain-based |
|
||||
| HTTPS | нет | автоматически (Let's Encrypt) |
|
||||
| PUID/PGID | 1000/1000 | 921/921 (transmission) |
|
||||
| Staging папки | `movies-radarr/`, `series-sonarr/` | `radarr/`, `sonarr/` |
|
||||
| Прокси для индексеров | нет | vless-proxy SOCKS5 (hermes_taiga_net) |
|
||||
| Авто-синк (watchlist) | ❌ (был, убрали) | ❌ нет |
|
||||
| Jellyfin users | alex + lisa | только alex |
|
||||
| PGS→SRT | pgsrip + cron | TBD (при необходимости) |
|
||||
|
||||
## Pitfalls (задокументировано при деплое)
|
||||
|
||||
- `d---------` на папках в ls — это норма для NFSv4 ACL на TrueNAS. Реальные права через `midclt call filesystem.getacl`
|
||||
- Не трогать ACL существующих папок (Movies, Cartoons, Downloads) — только новые
|
||||
- После alpine `chown` NFSv4 ACE слетают — нужно повторно применять через midclt `filesystem.setacl`
|
||||
- `indexers.prowlarr.com` отдаёт 403 Cloudflare с IP Тайги → Prowlarr не может скачать Cardigann definitions. Решение: скопировать `/config/Definitions/` с Кракена (549 yml-файлов)
|
||||
- После старта Prowlarr `/indexer/schema` недоступен ~2-3 мин (HTTP timeout к indexers.prowlarr.com). Ждать
|
||||
- POST /indexer зависает при добавлении Cardigann через API (capability check). Решение: import через SQLite напрямую с Кракена
|
||||
- Jellyfin 10.11: `name` в POST `/Library/VirtualFolders` должен быть в **query string** (`?name=Movies&collectionType=movies`), не в body
|
||||
- Transmission whitelist задаётся через env var `WHITELIST` в compose — settings.json перезаписывается при старте
|
||||
- Transmission compose location: `/mnt/RED_2TB/docker/transmission/docker-compose.yml`
|
||||
- ⚠️ **УТОЧНЕНО 2026-09-26: `python3` на хосте Тайги ЕСТЬ** (использовался для разбора JSON).
|
||||
Не хватает **`curl`** и **`sqlite3`**. Рабочий паттерн API-вызовов — **`wget` внутри контейнера
|
||||
+ хостовый `python3` для разбора**:
|
||||
```bash
|
||||
ssh truenas_admin@mallexxx.duckdns.org \
|
||||
"docker exec prowlarr sh -c 'wget -qO- --header=\"X-Api-Key: <KEY>\" http://localhost:9696/api/v1/health'"
|
||||
```
|
||||
busybox-`wget` умеет только `-qO-` / `--header` / `--timeout`; **`-e use_proxy=yes` НЕ поддерживает
|
||||
(GNU-опция)** → прокси-тесты внутри контейнера этим способом невозможны.
|
||||
- ⚠️ **Shell-экранирование JSON через ssh** — кавычки в `--header` ломаются на нескольких уровнях.
|
||||
Рабочий приём: писать результат **в файл** внутри контейнера/на хосте, разбирать отдельно.
|
||||
- ⚠️ **`/etc/resolv.conf` контейнеров** = `nameserver 127.0.0.11` (Docker embedded DNS) →
|
||||
в контейнерах нет `getent`; для проверки DNS использовать `nslookup`/`wget`.
|
||||
|
||||
## История
|
||||
|
||||
- **2026-09-28 (вечер)** — ✅ **ВЫПОЛНЕНО: FlareSolverr развёрнут → индексеры 6/6.**
|
||||
Контейнер `flaresolverr` добавлен в `arr/docker-compose.yml` (`8191`, `media_net`,
|
||||
`shm_size: 1gb`, `LOG_LEVEL=warning`, `PROXY_URL=socks5://vless-proxy:1080`).
|
||||
Прокси-элемент `flaresolverr` (id=2, `requestTimeout=180`) + теги `[1,2]` на CF-индексеры.
|
||||
`health` → `[]`, `indexerstatus` → `[]`, поиск «matrix» → **256**.
|
||||
Главный питфолл — FS-сессия `prowlarr` не наследует `PROXY_URL` (лечится `sessions.destroy`).
|
||||
Swap не трогали (RAM хватает) — Alex отклонил идею.
|
||||
Полный разбор — [[personal/tech/flaresolverr-taiga]].
|
||||
- **2026-09-28 (утро)** — разведка под задачу «поставить FlareSolverr как на Кра́кене».
|
||||
Подтверждено, что **DNS-блокер уже закрыт** (прокси-маршрут от 2026-09-26: rutracker 301 /
|
||||
nnmclub 200 / kinozal.me 200; поиск RuTor 100 + Byrutor 6). Остаточная проблема —
|
||||
**Cloudflare JS-челлендж** на RuTracker/Kinozal/Kinozal(M). План —
|
||||
[[personal/plans/flaresolverr-taiga-deploy]].
|
||||
- **2026-09-26** — разведка под задачу «Lidarr + музыка + синк с Jellyfin». Стек жив, но
|
||||
**индексеры не работали с дня деплоя** (DNS-фильтр провайдера: NXDOMAIN на rutracker.org /
|
||||
rutor.info / kinozal.tv / nnmclub.to с 8.8.8.8 и роутера; `byrutgame.org` резолвится).
|
||||
Обнаружено, что **vless-proxy НЕ подключён к media_net** — прокси-обход никогда не работал.
|
||||
Исправлено в тот же день (3/6 индексеров).
|
||||
- **2026-05-20** — первоначальный деплой
|
||||
|
||||
## Связанные заметки
|
||||
|
||||
- [[personal/tech/flaresolverr-taiga]] — ✅ **FlareSolverr на Тайге: 6/6 индексеров, все 5 питфоллов** (2026-09-28)
|
||||
- [[personal/plans/flaresolverr-taiga-deploy]] — ✅ **выполненный план** FlareSolverr на Тайге + снятие карантина индексера
|
||||
- [[personal/plans/lidarr-taiga-and-indexer-unblock]] — ⏳ **план 2026-09-26:** Lidarr на Тайге + разблокировка индексеров (DNS-фильтр ✅ закрыт 2026-09-28)
|
||||
- [[personal/tech/music-tags-repair-truenas]] — ремонт 7906 битых тегов (блокирует Music-библиотеку)
|
||||
- [[family/how-to/jellyfin-config]] — живой инстанс Jellyfin на Тайге
|
||||
- [[personal/tech/truenas-nfs4-acl-and-arrmultiuser]] — NFSv4 ACL и uid 950
|
||||
Reference in new issue
Block a user