Files
obsidian-vault/family/projects/media-toolbox-taiga.md
T

18 KiB
Executable File
Raw Blame History

title, namespace, type, tags, created, updated, status
title namespace type tags created updated status
*arr Stack на Тайге — Setup & Config family reference
taiga
radarr
sonarr
prowlarr
jellyfin
arr
media
lidarr
dns
2026-05-20 2026-09-26 deployed

*arr Stack на Тайге — Setup & Config

🔴 STATE 2026-09-26 (разведка, изменений НЕ вносилось): Контейнеры живы (prowlarr/radarr/sonarr/jellyfin/transmission, uid 950, media_net на месте). Индексеры НЕ работают — DNS-фильтр провайдера Тайги, initialFailure = 2026-05-20 (со дня деплоя). Прокси-обход (vless-proxy) не подключён к media_net → никогда не работал. Плюс RemotePathMapping не выставлен → health-ошибка в Radarr/Sonarr. Lidarr НЕ установлен. Music-библиотеки в Jellyfin нет (заблокирована ремонтом тегов). План: personal/plans/lidarr-taiga-and-indexer-unblock — ждёт 2 ответов Alex.

Архитектура

Prowlarr (9696) → Radarr (7878) + Sonarr (8989) → Transmission (9091) → Jellyfin (8096)

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
Transmission https://transmission.mallexxx.duckdns.org (уже был)

| Lidarr | https://lidarr.mallexxx.duckdns.org — ⏳ НЕ установлен (план, Фаза 1) |

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/ Музыка (7890 аудиофайлов, 8 категорий) ⏳ библиотеки ещё нет — план 2026-09-26
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 плоский:

{"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:

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.

Prowlarr — прокси для заблокированных индексеров

vless-proxy доступен в media_net как vless-proxy (SOCKS5 1080, HTTP 1081).

Настройка (фактическое состояние после 2026-09-26):

  • Прокси vless-socks5 (id=1), Type Socks5, Host vless-proxy, Port 1080
  • Тег proxy (id=1) — создан; все 6 индексеров имеют tags [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. Решение — FlareSolverr (не установлен, ждём решение Alex).

🔴 Важно для RuTracker/Kinozal: kinozal.tv МЁРТВ (NXDOMAIN даже на выходной стороне прокси) — использовать kinozal.me (через прокси → 200).

Индексеры (те же что на Кракене)

id Имя Примечание
1 RuTracker через прокси; ⚠️ Cloudflare-челлендж на логине
2 RuTor через прокси; ✅ работает
3 Byrutor через прокси; ✅ работает; enableRss: false
4 NoNaMe Club через прокси; ✅ работает
5 Kinozal через прокси; ⚠️ Cloudflare Protection; URL должен быть kinozal.me
6 Kinozal (M) через прокси; ⚠️ Cloudflare Protection; магнет, без grab limit — предпочтительный

preferMagnetUrl: true для всех → нет дневного лимита на .torrent.

router.py

Скрипт: /mnt/RED_2TB/docker/arr/media-pipeline/router.py Адаптация kraken-версии с изменёнными путями:

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

Запуск вручную (авто-хука нет):

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 для разбора**:
    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-05-20 — первоначальный деплой
  • 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 — прокси-обход никогда не работал. План и 2 открытых вопроса — personal/plans/lidarr-taiga-and-indexer-unblock. Изменений нет.

Связанные заметки