docs: convert README to German with comprehensive feature documentation and deployment guide
Replace English README with German documentation covering all features: Radarr/Sonarr media tracking with quality/audio/subtitle analysis, SABnzbd download monitoring with language detection, dashboard with service status/CPU/RAM/storage/I/O pressure/library stats, datastore with categories/capacity/RAID status/rebuild progress/SMART/temperature/serial numbers. Add detailed configuration sections for path mapping between Radarr/Sonarr and container volumes
This commit is contained in:
@@ -1,43 +1,74 @@
|
||||
# Media Max
|
||||
|
||||
## Datastore
|
||||
Media Max ist ein kompaktes Media-Control-Dashboard für Radarr, Sonarr und SABnzbd. Es zeigt Medienqualität, Audio- und Untertitelspuren, fehlende deutsche Spuren, laufende Downloads sowie System-, Speicher- und RAID-Status.
|
||||
|
||||
Der Datastore-Tab zeigt den read-only Speicherstatus von `/nesflix`, Medienkategorien
|
||||
und den Linux-Software-RAID-Status. Größen-Scans werden standardmäßig 15 Minuten
|
||||
gecacht; RAID-/Recovery-Werte aktualisieren sich live. Konfigurierbar sind
|
||||
`DATASTORE_PATH`, `DATASTORE_HOST_PATH`, `RAID_DEVICE`, `STORAGE_CACHE_SECONDS` und
|
||||
optional `SMART_ENABLED=true` für SMART-Healthwerte.
|
||||
## Funktionen
|
||||
|
||||
## Wichtig: Path-Mapping
|
||||
- Radarr-Filme mit Qualität, Status, Audio, Untertiteln, Codec und Größe
|
||||
- Sonarr-Serien mit Episodenansicht und Kategorien über Tags:
|
||||
- `anime` → Anime
|
||||
- `kdrama` → K-Dramen
|
||||
- alle anderen → Standard
|
||||
- Separate Liste „Ohne Deutsch“ für vorhandene oder aktuell geladene Medien
|
||||
- Staffel 0 kann in den Einstellungen ein- oder ausgeblendet werden
|
||||
- Externe Untertitel (`.srt`, `.ass`, `.ssa`, `.vtt`, `.sub`, `.idx`, `.sup`) werden berücksichtigt
|
||||
- SABnzbd-Downloadübersicht mit aktiven Downloads und separater Queue-/Verifying-Tabelle
|
||||
- Download-Sprachen aus üblichen Release-Kürzeln wie `Eng`, `Ger`, `Fre`, `Ita` und `Spa`
|
||||
- Dashboard mit Diensten, CPU, RAM, Speicher, I/O Pressure und Bibliotheksstatistiken
|
||||
- Datastore mit Kategorien, Gesamtauslastung, I/O Pressure und RAID-Status
|
||||
- RAID-Rebuild-Fortschritt, Geschwindigkeit, Restzeit, Plattenmodell, SMART, Temperatur und Hersteller-Seriennummer
|
||||
- Parallele Hintergrundscans mit konfigurierbarer Worker-Anzahl
|
||||
- PWA-Unterstützung für HTTPS-fähige Installationen auf Desktop und Android
|
||||
|
||||
Radarr kann seine Filme z.B. unter `/data/filme` sehen, während der Host sie unter
|
||||
`/nesflix/filme` hat. Das Dashboard unterstützt diese Abbildung explizit:
|
||||
## Konfiguration
|
||||
|
||||
```yaml
|
||||
environment:
|
||||
RADARR_MEDIA_PATH: "/data/filme"
|
||||
LOCAL_MEDIA_PATH: "/media/filme"
|
||||
Persönliche Werte gehören in `.env`. Die Datei ist in `.gitignore` eingetragen. Als Vorlage dient `.env.example`:
|
||||
|
||||
volumes:
|
||||
- /nesflix/filme:/media/filme:ro
|
||||
```bash
|
||||
cp .env.example .env
|
||||
```
|
||||
|
||||
### Radarr und Medienpfade
|
||||
|
||||
Radarr kann beispielsweise `/data/filme` verwenden, während Media Max die Dateien im Container unter `/media/filme` sieht:
|
||||
|
||||
```env
|
||||
RADARR_URL=http://radarr:7878
|
||||
RADARR_API_KEY=...
|
||||
RADARR_MEDIA_PATH=/data/filme
|
||||
LOCAL_MEDIA_PATH=/media/filme
|
||||
FILM_MEDIA_VOLUME=/nesflix/filme
|
||||
```
|
||||
|
||||
### Sonarr
|
||||
|
||||
```env
|
||||
SONARR_URL=http://sonarr:8989
|
||||
SONARR_API_KEY=...
|
||||
SONARR_MEDIA_PATH=/data/serien
|
||||
LOCAL_SERIES_PATH=/media/serien
|
||||
SERIES_MEDIA_VOLUME=/nesflix/serien
|
||||
```
|
||||
|
||||
### SABnzbd
|
||||
|
||||
```env
|
||||
SAB_URL=http://sabnzbd:8080
|
||||
SAB_API_KEY=...
|
||||
```
|
||||
|
||||
Der Download-Tab verwendet Queue und History aus SABnzbd. Für laufende Releases werden Sprachen aus dem Dateinamen abgeleitet; die Medienanalyse nach dem Import erfolgt über `ffprobe`.
|
||||
|
||||
## Dienststatus
|
||||
|
||||
Der Dashboard-Tab prüft zusätzlich Jellyfin, Seerr, Prowlarr, Easynews as Indexer,
|
||||
qBittorrent, Bazarr, Lingarr, LibreTranslate sowie die Sonarr-/Radarr-Prowlarr-Proxies.
|
||||
Die Prüfungen laufen parallel im Hintergrund und blockieren die Seite nicht.
|
||||
|
||||
Die Standardnamen funktionieren, wenn die Container im selben Docker-Netzwerk liegen.
|
||||
Für qBittorrent muss `QBITTORRENT_URL` auf eine aus dem Dashboard-Container erreichbare
|
||||
URL zeigen, zum Beispiel `http://host.docker.internal:8080` oder die Host-IP.
|
||||
Der Dashboard-Tab prüft die Dienste parallel mit kurzen Timeouts und aktualisiert sie regelmäßig:
|
||||
|
||||
```env
|
||||
JELLYFIN_URL=http://jellyfin:8096
|
||||
SEERR_URL=http://seerr:5055
|
||||
PROWLARR_URL=http://prowlarr:9696
|
||||
EASYNEWS_INDEXER_URL=http://easynews-as-indexer:8081
|
||||
QBITTORRENT_URL=http://HOST_ODER_IP:8080
|
||||
QBITTORRENT_URL=http://host.docker.internal:8080
|
||||
BAZARR_URL=http://bazarr:6767
|
||||
LINGARR_URL=http://lingarr:9876
|
||||
LIBRETRANSLATE_URL=http://libretranslate:5000
|
||||
@@ -47,73 +78,93 @@ SERVICE_CHECK_TIMEOUT=3
|
||||
SERVICE_REFRESH_SECONDS=30
|
||||
```
|
||||
|
||||
Für die bereits vorhandenen Container sind keine zusätzlichen Compose-Services nötig;
|
||||
sie müssen im gemeinsamen `media-stack_default`-Netzwerk erreichbar sein. Falls
|
||||
qBittorrent nicht über `host.docker.internal` erreichbar ist, kann unter Linux je nach
|
||||
Docker-Konfiguration dieser Eintrag ergänzt werden:
|
||||
Die Container müssen im gemeinsamen Docker-Netzwerk `media-stack_default` erreichbar sein. qBittorrent läuft außerhalb des Compose-Stacks und benötigt deshalb eine erreichbare URL. Bei Bedarf stellt `extra_hosts` den Namen `host.docker.internal` bereit.
|
||||
|
||||
```yaml
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
## Scans und Performance
|
||||
|
||||
Scans laufen nach dem Laden der Bibliotheksdaten im Hintergrund. Über den Button „Neu scannen“ kann zwischen Radarr, Sonarr und allen Quellen gewählt werden. Die automatische Scan-Häufigkeit wird in den Einstellungen festgelegt.
|
||||
|
||||
```env
|
||||
SCAN_WORKERS=4
|
||||
REQUEST_TIMEOUT=20
|
||||
DB_PATH=/data/cache.db
|
||||
```
|
||||
|
||||
Ein Radarr-Pfad wie:
|
||||
`SCAN_WORKERS` steuert die Anzahl paralleler `ffprobe`-Jobs. Höhere Werte beschleunigen große Bibliotheken, erhöhen aber die I/O-Last.
|
||||
|
||||
`/data/filme/Avatar (2009)/Avatar.mkv`
|
||||
## Datastore, RAID und SMART
|
||||
|
||||
wird dadurch für ffprobe zu:
|
||||
Der Datastore ist standardmäßig `/nesflix` und wird read-only eingebunden:
|
||||
|
||||
`/media/filme/Avatar (2009)/Avatar.mkv`
|
||||
|
||||
## Konfiguration
|
||||
|
||||
Die persönlichen URLs, Pfade und API-Keys liegen in `.env`. Diese Datei ist in `.gitignore` eingetragen und bleibt bei `git pull` erhalten. Als Vorlage dient `.env.example`.
|
||||
|
||||
Beim ersten Start:
|
||||
|
||||
```bash
|
||||
cp .env.example .env
|
||||
```env
|
||||
DATASTORE_PATH=/nesflix
|
||||
DATASTORE_HOST_PATH=/nesflix
|
||||
RAID_DEVICE=/dev/md127
|
||||
STORAGE_CACHE_SECONDS=900
|
||||
SMART_ENABLED=true
|
||||
HOST_SYS_PATH=/host-sys
|
||||
```
|
||||
|
||||
Danach die Werte in `.env` eintragen. Sonarr und SABnzbd werden dort durch Auskommentieren der jeweiligen Variablen aktiviert. Wenn Sonarr aktiv ist, muss `SERIES_MEDIA_VOLUME` auf den echten Host-Pfad deiner Serien-Library zeigen; dieser Ordner wird in den Dashboard-Container nach `/media/serien` gemountet.
|
||||
Für SMART, Temperaturen und echte Hersteller-Seriennummern benötigt der Container Zugriff auf `/dev`, `/sys`, `/run/udev`, `SYS_RAWIO` sowie `smartctl` im Image. Die App liest keine RAID-Daten schreibend und führt keinen Rebuild aus.
|
||||
|
||||
## Start
|
||||
Die I/O Pressure basiert auf Linux PSI (`/proc/pressure/io`). Wenn der Kernel PSI nicht unterstützt, wird die Anzeige als nicht verfügbar markiert.
|
||||
|
||||
API-Keys und Pfade in `.env` anpassen:
|
||||
## Logging
|
||||
|
||||
```env
|
||||
LOG_LEVEL=INFO
|
||||
LOG_FILE=/data/media-max.log
|
||||
LOG_RETENTION_HOURS=6
|
||||
```
|
||||
|
||||
Erwartbare Verbindungsfehler werden als kurze einzeilige Meldungen protokolliert. Die Logdatei wird standardmäßig alle sechs Stunden rotiert.
|
||||
|
||||
## Start mit Docker Compose
|
||||
|
||||
```bash
|
||||
docker compose down
|
||||
docker compose up -d --build
|
||||
docker compose logs -f
|
||||
docker compose logs -f media-max
|
||||
```
|
||||
|
||||
Die Seite lädt zuerst die Library-Metadaten. Die ffprobe-Scans laufen danach im Hintergrund; oben wird der Fortschritt angezeigt. Für Sonarr die optionalen Variablen und den Serien-Volume-Mount in `docker-compose.yml` aktivieren. Die Navigation trennt Filme und Serien, Serien sind pro Show aufklappbar.
|
||||
|
||||
Sonarr benötigt:
|
||||
Der Compose-Stack bindet standardmäßig ein:
|
||||
|
||||
```yaml
|
||||
SONARR_URL: "http://sonarr:8989"
|
||||
SONARR_API_KEY: "..."
|
||||
SONARR_MEDIA_PATH: "/data/serien"
|
||||
LOCAL_SERIES_PATH: "/media/serien"
|
||||
volumes:
|
||||
- ${FILM_MEDIA_VOLUME}:/media/filme:ro
|
||||
- ${SERIES_MEDIA_VOLUME:-/nesflix/serien}:/media/serien:ro
|
||||
- ${DATASTORE_HOST_PATH:-/nesflix}:/nesflix:ro
|
||||
- /dev:/host-dev:ro
|
||||
- /sys:/host-sys:ro
|
||||
- /run/udev:/host-run-udev:ro
|
||||
- ./data:/data
|
||||
```
|
||||
|
||||
SABnzbd benötigt für den Download-Tab:
|
||||
Für Radarr, Sonarr und die weiteren Container wird das externe Netzwerk `media-stack_default` verwendet.
|
||||
|
||||
```yaml
|
||||
SAB_URL: "http://sabnzbd:8080"
|
||||
SAB_API_KEY: "..."
|
||||
```
|
||||
## Fehlersuche
|
||||
|
||||
Der API-Key steht in SABnzbd unter `Config > General`. Die laufenden Jobs kommen aus der SABnzbd-Queue, abgeschlossene und fehlgeschlagene Jobs aus der History. Die Sprache eines laufenden Releases wird aus dessen Namen abgeleitet; nach dem Import ist die Sprache im Radarr-/Sonarr-Scan verlässlich.
|
||||
|
||||
## Bei weiterem Scanfehler
|
||||
|
||||
Prüfe einen Pfad im Container:
|
||||
Prüfe zuerst, ob Media Max die Medien sieht:
|
||||
|
||||
```bash
|
||||
docker exec -it media-max sh
|
||||
ls -lah /media/filme
|
||||
ls -lah /media/serien
|
||||
find /media/filme -type f | head
|
||||
ffprobe -v error -show_entries stream=codec_type,codec_name:stream_tags=language -of json "/media/filme/DEIN/FILM.mkv"
|
||||
```
|
||||
|
||||
Teste anschließend `ffprobe` direkt im Container:
|
||||
|
||||
```bash
|
||||
ffprobe -v error \
|
||||
-show_entries stream=codec_type,codec_name:stream_tags=language \
|
||||
-of json "/media/filme/DEIN/FILM.mkv"
|
||||
```
|
||||
|
||||
Für SMART:
|
||||
|
||||
```bash
|
||||
smartctl -i -d sat /host-dev/sda
|
||||
smartctl -A -d sat /host-dev/sda
|
||||
```
|
||||
|
||||
Wenn eine PWA-Installation in Chrome nicht angeboten wird, muss Media Max über gültiges HTTPS aufgerufen werden. Nach Änderungen an Manifest oder Service Worker sollten alte Website-Daten bzw. eine alte Verknüpfung entfernt und die Seite neu geladen werden.
|
||||
|
||||
Reference in New Issue
Block a user