18 KiB
Executable File
title, namespace, type, tags, created, updated, status
| title | namespace | type | tags | created | updated | status | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| *arr Stack на Тайге — Setup & Config | family | reference |
|
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писать не может). Отправлять весь файл, не патч. См. skilltruenas-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=musicJellyfin раскладывает по тегам, риск «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), TypeSocks5, Hostvless-proxy, Port1080 - Тег
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.php2 RuTor ✅ OK 3 Byrutor ✅ OK 4 NoNaMe Club ✅ OK 5 Kinozal ❌ blocked by CloudFlare Protection6 Kinozal (M) ❌ blocked by CloudFlare ProtectionRuTracker:
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
chownNFSv4 ACE слетают — нужно повторно применять через midcltfilesystem.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для разбора**:
busybox-ssh truenas_admin@mallexxx.duckdns.org \ "docker exec prowlarr sh -c 'wget -qO- --header=\"X-Api-Key: <KEY>\" http://localhost:9696/api/v1/health'"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. Изменений нет.
Связанные заметки
- personal/plans/lidarr-taiga-and-indexer-unblock — ⏳ активный план 2026-09-26: Lidarr на Тайге + разблокировка индексеров (DNS-фильтр провайдера)
- 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