193 lines
8.0 KiB
Markdown
193 lines
8.0 KiB
Markdown
---
|
||
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: 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-версии с изменёнными путями:
|
||
|
||
```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`
|
||
- На Тайге нет `curl` и `python3` в PATH хоста (zsh) — только внутри контейнеров. Скрипты запускать через `docker exec` или python3-файлами через scp
|
||
|
||
## История
|
||
|
||
- **2026-05-20** — первоначальный деплой
|