[2026-09-26] eagle: family/how-to/jellyfin-config.md family/how-to/truenas-infrastructure.md family/projects/media-toolbox-taiga.md
This commit is contained in:
1 parent
4687f2f85c
commit
02f8656ed8
3 files changed
+115
-5
No files matched your search
@@ -1,7 +1,7 @@
|
||||
---
|
||||
title: Jellyfin Config
|
||||
created: '2026-05-23'
|
||||
updated: '2026-06-17'
|
||||
updated: '2026-09-26'
|
||||
type: tech
|
||||
namespace: family
|
||||
tags:
|
||||
@@ -16,9 +16,7 @@ related:
|
||||
---
|
||||
# Jellyfin Config
|
||||
|
||||
**URL:** `http://kraken:8096`
|
||||
**API Base (внутри контейнера kraken):** `http://kraken:8096/jellyfin/`
|
||||
(все API эндпоинты под префиксом `/jellyfin`)
|
||||
> ⚠️ **Обновлено 2026-09-26.** Раздел ниже «URL / API Base / пути» описывает **Kraken-инсталляцию** (`/opt/jellyfin/`, `/media/*`, префикс `/jellyfin`) и **устарел для TrueNAS**. Живой инстанс — на **TrueNAS/Taiga**, раздел «### Taiga (TrueNAS) — ЖИВОЙ ИНСТАНС» ниже. Проверено фактом 2026-09-26.
|
||||
|
||||
## Users
|
||||
|
||||
@@ -32,6 +30,7 @@ related:
|
||||
`87af49b6ff62ea68da6abdab0d7a4fbc`
|
||||
|
||||
Used by automation scripts (watchlist-sync, media-pipeline agents).
|
||||
⚠️ **Для TrueNAS-инстанса этот ключ НЕ работает** (проверено 2026-09-26: `401 Unauthorized`, в логе `Invalid token`). Живой ключ — в разделе Taiga ниже.
|
||||
|
||||
## Database / Maintenance
|
||||
|
||||
@@ -64,3 +63,109 @@ Used by automation scripts (watchlist-sync, media-pipeline agents).
|
||||
| Music | | Музыка |
|
||||
|
||||
> **Важно:** Прямые пути sonarr (`/media/series-sonarr/`, `/media/movies-radarr/`) **не должны быть** в библиотеках Jellyfin. Router.py создаёт симлинки из sonarr-папок в `/media/series/` и `/media/movies/`. Если symlink уже есть — дубли не появятся. Если есть старые дубли — удалить orphaned items через `DELETE /Items/{id}`.
|
||||
|
||||
---
|
||||
|
||||
# ### Taiga (TrueNAS) — ЖИВОЙ ИНСТАНС
|
||||
|
||||
> ✅ Факт-проверка **2026-09-26**. Всё ниже — с живой машины, не из Kraken-доки.
|
||||
|
||||
## Расположение и монтирование
|
||||
|
||||
| Параметр | Значение |
|
||||
|---|---|
|
||||
| Хост | TrueNAS (`192.168.2.197`), доступ `ssh truenas_admin@mallexxx.duckdns.org` |
|
||||
| Контейнер | `jellyfin`, образ из `/mnt/RED_2TB/docker/arr/docker-compose.yml` |
|
||||
| URL (наружу) | `https://jellyfin.mallexxx.duckdns.org` (Caddy) |
|
||||
| Внутренний порт | `8096` — **БЕЗ префикса** `/jellyfin` (префикс был Kraken-спецификой) |
|
||||
| Монтирование 1 | `/mnt/RED_2TB/docker/arr/jellyfin` → `/config` (rw) |
|
||||
| Монтирование 2 | `/mnt/RED_2TB/storage` → `/storage` (**ro**) |
|
||||
| Сеть | `caddy_default` (только; `media_net` не подключён) |
|
||||
|
||||
## API-ключ (живой)
|
||||
|
||||
`eaglesetup2026taiga` — имя ключа `eagle-setup`.
|
||||
|
||||
Источник (когда нужно перечитать): таблица `ApiKeys` в
|
||||
`/mnt/RED_2TB/docker/arr/jellyfin/data/data/jellyfin.db`.
|
||||
|
||||
```bash
|
||||
# Снять копию БД (безопасно; контейнер не останавливать для ЧТЕНИЯ копии)
|
||||
cd /tmp && ssh truenas_admin@mallexxx.duckdns.org \
|
||||
'cat /mnt/RED_2TB/docker/arr/jellyfin/data/data/jellyfin.db' > jf-copy.db
|
||||
sqlite3 jf-copy.db "SELECT Name, AccessToken FROM ApiKeys;"
|
||||
```
|
||||
|
||||
> 🔴 **`sqlite3` на TrueNAS-хосте НЕ установлен** (в доке встречается обратное). Рабочий приём: скопировать `.db` на Mac (`cat` через ssh) → читать локальным `sqlite3`.
|
||||
> ⚠️ Копия `.db` **без `-wal`** может отставать (WAL-режим). Для чтения ключа/списка библиотек этого достаточно — проверено, значения совпали с живыми.
|
||||
|
||||
## Библиотеки (фактическое состояние 2026-09-26)
|
||||
|
||||
6 библиотек в `BaseItems` (тип `MediaBrowser.Controller.Entities.CollectionFolder`):
|
||||
|
||||
| Название | `CollectionType` | `PhysicalLocationsList` |
|
||||
|---|---|---|
|
||||
| Movies | `movies` | `/config/data/root/default/Movies`, `/storage/Movies` |
|
||||
| Cartoons | `movies` | `/config/data/root/default/Cartoons`, `/storage/Cartoons` |
|
||||
| Documentaries | `movies` | `/config/data/root/default/Documentaries`, `/storage/documentaries` |
|
||||
| Series | `tvshows` | `/config/data/root/default/Series`, `/storage/series` |
|
||||
| Cartoon Series | `tvshows` | `/config/data/root/default/Cartoon Series`, `/storage/cartoons-series` |
|
||||
| Documentary Series | `tvshows` | `/config/data/root/default/Documentary Series`, `/storage/documentaries-series` |
|
||||
|
||||
> 📌 **У каждой виртуальной папки ДВА пути:** служебный `/config/data/root/default/<Name>` (создаётся Jellyfin автоматически) и реальный `/storage/<Folder>`. Реальный путь дополнительно виден как `MediaBrowser.Controller.Entities.Folder` с собственным `Id`.
|
||||
> **Music-библиотеки на 2026-09-26 НЕТ** (в доке строка `Music` была пустой и остаётся незаполненной — см. план ниже).
|
||||
|
||||
## Папка музыки — разведка 2026-09-26
|
||||
|
||||
| Параметр | Значение |
|
||||
|---|---|
|
||||
| Хост-путь | `/mnt/RED_2TB/storage/Music` |
|
||||
| В контейнере | `/storage/Music` — **уже смонтировано**, доп. монтирование НЕ нужно |
|
||||
| Объём | **7890** аудиофайлов (`mp3/flac/m4a/ogg/wav/opus/aac`) |
|
||||
| Структура | 8 категорий: `!A Not sorted`, `!Pop, Club, Любэ`, `!Retro`, `!Rock&Folk`, `!Барды`, `!Детские`, `!Классика`, `!Рэп`, `z Другое, Enigma, Ленинград` |
|
||||
| Мусор | `bootmgr`, `.DS_Store`, `desktop.ini`, `Thumbs.db`, `convert_wma.sh`, `wma_convert.log` — Jellyfin игнорирует |
|
||||
| Права | `truenas_admin:truenas_admin`, `drwxrwx---` (для `PUID/PGID 921` путь доступен — `/storage` монтируется целиком) |
|
||||
|
||||
> ⚠️ **Структура папок НЕ соответствует музыкальной раскладке** (`Artist/Album`). Jellyfin для `collectionType=music` раскладывает по **тегам**, а не по папкам. Категории вида `!Rock&Folk` — «мусорные» имена из файловой системы, не артисты. Ожидаемый риск: файлы с пустыми тегами уедут в `Unknown Artist`. Вариант митигации — `EnableFolderView` в настройках библиотеки (даёт навигацию по физическим папкам).
|
||||
|
||||
## API-команды (Taiga, без префикса)
|
||||
|
||||
```bash
|
||||
TOKEN=eaglesetup2026taiga
|
||||
# Список библиотек
|
||||
curl -s -H "X-MediaBrowser-Token: $TOKEN" http://localhost:8096/Library/VirtualFolders
|
||||
# Инфо о сервере
|
||||
curl -s -H "X-MediaBrowser-Token: $TOKEN" http://localhost:8096/System/Info
|
||||
```
|
||||
|
||||
> 🔴 **`/System/Info` без токена → `401` — это НЕ поломка.** Именно так и выглядит живой сервер. С префиксом `/jellyfin/System/Info` → `404` (префикса нет). Оба наблюдения 2026-09-26, оба могут сбить с толку при диагностике.
|
||||
|
||||
### 🔴 ПИТФОЛЛ: `name` и `paths` — в QUERY STRING, не в body
|
||||
|
||||
Создание библиотеки (Jellyfin 10.11):
|
||||
|
||||
```bash
|
||||
# ПРАВИЛЬНО:
|
||||
curl -s -X POST -H "X-MediaBrowser-Token: $TOKEN" \
|
||||
"http://localhost:8096/Library/VirtualFolders?name=Music&collectionType=music&paths=/storage/Music"
|
||||
# НЕПРАВИЛЬНО: name/paths в JSON-body → библиотека не создаётся
|
||||
```
|
||||
|
||||
## ПЛАН: добавить музыкальную библиотеку (согласован 2026-09-26, НЕ ВЫПОЛНЕН)
|
||||
|
||||
6 шагов, в порядке исполнения:
|
||||
|
||||
1. **Бэкап конфига** — `docker stop jellyfin` → tar `/mnt/RED_2TB/docker/arr/jellyfin/` → `docker start jellyfin`. Без остановки бэкап БД битый (WAL).
|
||||
2. **Создать библиотеку** — `POST /Library/VirtualFolders?name=Music&collectionType=music&paths=/storage/Music` (query string!).
|
||||
3. **Проверка API** — `GET /Library/VirtualFolders` → Music в списке.
|
||||
4. **Скан** — дождаться индексации 7890 файлов (~10–30 мин).
|
||||
5. **ПРИЁМКА ALEX** — открыть `https://jellyfin.mallexxx.duckdns.org` → вкладка Music → треки видны. Приёмка = видно в UI, не «API отвечает».
|
||||
6. **Обновить доки** после подтверждения — таблица библиотек здесь + `family/projects/media-toolbox-taiga.md`.
|
||||
|
||||
> ❓ **Открытый выбор перед шагом 2:** включать ли `EnableFolderView` (навигация по папкам вместо тегов). Решается после выборочной проверки тегов файлов.
|
||||
|
||||
## Связанные заметки
|
||||
|
||||
- [[family/projects/media-toolbox-taiga]] — *arr стек на Taiga (Prowlarr/Radarr/Sonarr/Transmission/Jellyfin)
|
||||
- [[family/how-to/truenas-infrastructure]] — TrueNAS: контейнеры, доступ, структура пула
|
||||
- [[family/how-to/navidrome-truenas-android]] — альтернативный музыкальный сервер (Navidrome) на той же папке `Music`
|
||||
@@ -213,6 +213,7 @@ TrueNAS использует **NFSv4 ACL**, а не стандартный POSIX
|
||||
| immich-server | immich-app/immich-server:release | 2283 | immich.mallexxx.duckdns.org |
|
||||
| immich-postgres | tensorchord/pgvecto-rs:pg14-v0.2.0 | — | — |
|
||||
| immich-redis | redis:7 | — | — |
|
||||
| **jellyfin** | из `/mnt/RED_2TB/docker/arr/docker-compose.yml` | 8096 | jellyfin.mallexxx.duckdns.org |
|
||||
| ~~nodered~~ ⛔ | nodered/node-red:latest | ~~1880~~ | **ПОГАШЕН 2026-09-14** — flows на t610 (ingress) |
|
||||
| ~~mosquitto~~ ⛔ | eclipse-mosquitto:latest | ~~1883~~ | **ПОГАШЕН 2026-09-14** — брокер на t610 |
|
||||
| caddy | caddy:latest | 80, 443 | reverse proxy для всего |
|
||||
|
||||
@@ -11,7 +11,7 @@ tags:
|
||||
- arr
|
||||
- media
|
||||
created: '2026-05-20'
|
||||
updated: '2026-05-20'
|
||||
updated: '2026-09-26'
|
||||
status: deployed
|
||||
---
|
||||
# *arr Stack на Тайге — Setup & Config
|
||||
@@ -82,10 +82,14 @@ Caddy: subdomain-based роутинг, без URL Base. Let's Encrypt автом
|
||||
| `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 |
|
||||
|
||||
Reference in new issue
Block a user