--- title: '*arr Stack на Тайге — Setup & Config' namespace: family type: reference tags: - taiga - radarr - sonarr - prowlarr - jellyfin - arr - media created: '2026-05-20' updated: '2026-05-20' status: planned --- # *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// 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 ключи | Сервис | Полный ключ | |--------|-------------| | Radarr | TBD после деплоя | | Sonarr | TBD после деплоя | | Prowlarr | TBD после деплоя | | Jellyfin | TBD после деплоя | Получить: `docker exec <svc> grep ApiKey /config/config.xml` ## 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-версии с изменёнными путями: ```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 (при необходимости) | ## История - **2026-05-20** — первоначальный деплой