Tune by Mozaiklabs

Műszaki útmutató

Ez az oldal haladó felhasználóknak és integrátoroknak szól: hogyan épül fel a Tune, az API-ja és az üzemeltetési részletek. A mindennapi beállításokhoz lásd a Konfiguráció oldalt.

Architektúra

  • Szerver: egyetlen program, a tune-server, Rustban írva. Indexeli a könyvtárat, dekódolja a hangot, vezérli az eszközöket, és kiszolgálja a webes felületet, az API-t és a hangfolyamokat, mindezt egyetlen porton (alapértelmezetten 8888).
  • Webes felület: a szerver által kiszolgált Svelte-alkalmazás (a program melletti web/ mappa, vagy a TUNE_WEB_DIR).
  • Adatbázis: alapértelmezetten SQLite, opcionálisan PostgreSQL (lásd: Konfiguráció). A migrációk induláskor futnak le.
  • Dekódolás: beépített dekóderek (Symphonia, valamint a Tune saját WavPack- és APE-dekóderei és a libopus). Az átmintavételezés sinc-interpolációt használ (rubato). A lejátszás nem megy át az ffmpegen; a közzétett buildekhez egy minimális ffmpeg tartozik, kizárólag az átalakító AAC-kódolásához.
  • Felderítés: SSDP a DLNA/UPnP-hez, mDNS az AirPlay-hez és a Chromecasthoz, Squeezebox-felderítés az UDP 3483-on.
  • A Tune a hálózaton UPnP-médiaszerverként is megjelenik (a könyvtára látható a DLNA-vezérlőalkalmazásokban), zónánként pedig UPnP-rendererként.

HTTP API

Minden útvonal a /api/v1 alatt található. Az útvonalak JSON-listája a GET /api/v1/system/api-docs címen érhető el (az API-dokumentáció hivatkozás a Beállítások › Rendszer › Névjegy alatt). A Tune nem biztosít OpenAPI-leírást.

ÚtvonalCél
GET /api/v1/system/healthA szerver állapota: ok vagy degraded (HTTP 200), error (HTTP 503)
GET /api/v1/system/versionA szerver verziója
GET /api/v1/system/statsStatisztikák (a Docker-lemezkép állapotellenőrzése használja)
POST /api/v1/system/scan, GET /api/v1/system/scan/statusBeolvasás indítása, az előrehaladás követése
GET /api/v1/system/logs?lines=NA legutóbbi naplósorok (alapértelmezetten 1000)
GET /api/v1/system/diagnostics/bundleDiagnosztikai archívum
GET /api/v1/zonesA zónák listája
GET /api/v1/zones/{id}/statusEgy zóna lejátszási állapota
POST /api/v1/zones/{id}/play, /pause, /resume, /stop, /next, /previous, /seek, /volumeLejátszásvezérlő parancsok
GET /api/v1/zones/{id}/queueVárólista
GET /api/v1/searchKeresés a könyvtárban és a szolgáltatásokban
GET /api/v1/library/albums, /artists, /tracksKönyvtár

A valós idejű események (lejátszás, várólista, beolvasás…) a /ws (vagy /api/v1/ws) címen lévő WebSocketen mennek át. A régi, v1 nélküli /api/scan útvonalak már nem léteznek.

Hitelesítés

A hitelesítés alapértelmezetten ki van kapcsolva, ami az API-t az egész helyi hálózat számára nyitva hagyja. Az API-n keresztül kapcsolható be (/api/v1/auth/config). A fiókok Tune-profilok, a jelszavakat Argon2-vel hashelik, a munkamenetek pedig 24 órás JWT-k. A hosszú életű API-tokent a POST /api/v1/auth/token állítja ki. Elfogadott fejlécek: Authorization: Bearer <token> és Authorization: ApiKey <key>. Bekapcsolt hitelesítés mellett is a /system/health és a /system/version nyilvános marad. A Tune nem szolgál ki HTTPS-t: ha szükséged van rá, tegyél elé fordított proxyt.

Squeezebox / LMS-kompatibilitás

  • Beépített SlimProto-szerver a 3483-as porton (TCP és UDP, a TUNE_SLIMPROTO_PORT változóval állítható), Squeezelite- és Squeezebox-lejátszókhoz.
  • LMS-kompatibilis szöveges parancsport a 9090-en (TUNE_CLI_PORT), amely a következő szabad portra költözik, ha a 9090 foglalt.

Üzemeltetés

  • .deb csomag: a program a /opt/tune/ mappában, az adatok a /var/lib/tune/ mappában, a konfiguráció a /etc/default/tune-server fájlban (frissítéseknél megmarad), a tune-server.service egység a tune felhasználóként fut. Az apt purge soha nem törli a /var/lib/tune mappát.
  • Docker: renesenses/tune lemezkép (amd64, arm64). Nem root tune felhasználóként fut (uid 1000), /data és /music kötetekkel. Sem helyi hangkimeneteket, sem PostgreSQL-t nem tartalmaz. arm64-en az AirPlay 2 nem érhető el, és a Tune AirPlay 1-et használ.
  • Tune OS: Fedora-alapú. A program a /opt/tune mappában, a tune szolgáltatás, az adatok a /opt/tune/data mappában, a 80-as port a 8888-ra irányítva, SSH bekapcsolva (a root-bejelentkezés tiltott).
  • Naplók: a RUST_LOG modulonkénti finom szűrést tesz lehetővé.

Lásd még