8.0 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-05-20 | deployed |
*arr Stack на Тайге — Setup & Config
Архитектура
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 (уже был) |
Caddy: subdomain-based роутинг, без URL Base. Let's Encrypt автоматически.
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 (подключён вручную) |
| vless-proxy | hermes_taiga_net + media_net (подключён вручную) |
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 |
Downloads/ |
Торренты (Transmission) | ❌ |
Все папки: uid=921, gid=921, NFSv4 ACL через midclt.
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)
Transmission монтирует /mnt/RED_2TB/storage/ → /mnt/storage/
Radarr/Sonarr монтируют /mnt/RED_2TB/storage/ → /storage/
Маппинг в каждом:
- host:
transmission - remotePath:
/mnt/storage/Downloads/ - localPath:
/storage/Downloads/
Prowlarr — прокси для заблокированных индексеров
vless-proxy доступен в media_net как vless-proxy:1080 (SOCKS5).
Настройка в Prowlarr: Settings → Indexers → Add Proxy:
- Type: SOCKS5
- Host:
vless-proxy, Port:1080 - Tags:
[proxy]
Индексеры с тегом proxy: RuTracker (заблокирован в РФ), остальные — по усмотрению.
Индексеры (те же что на Кракене)
| Имя | Примечание |
|---|---|
| RuTracker | через прокси |
| RuTor | |
| Byrutor | enableRss: false |
| NoNaMe Club | |
| Kinozal | |
| Kinozal (M) | магнет, без 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 - На Тайге нет
curlиpython3в PATH хоста (zsh) — только внутри контейнеров. Скрипты запускать черезdocker execили python3-файлами через scp
История
- 2026-05-20 — первоначальный деплой