Konfiguration
Tunetorch kennt zwei Ebenen der Konfiguration. Das ist keine Doppelung, sondern eine bewusste Trennung:
| Ebene | Wo | Wann wirksam | Wofür |
|---|---|---|---|
| Umgebungsvariablen | docker-compose.yml | nach Neustart des Containers | Infrastruktur: Pfade, Netzwerk, Prozessrechte |
| Server-Einstellungen | Admin-UI → Server-Einstellungen | sofort, ohne Neustart | Betrieb: Zeitzone, Cover-Größen, Limits, Wartung |
Faustregel: Was der Container beim Hochfahren wissen muss, ist eine Umgebungsvariable. Alles andere gehört in die Oberfläche.
Umgebungsvariablen
Alle tragen den Präfix TT_. Für den Normalbetrieb hinter einem TLS-Reverse-Proxy musst du
keine einzige davon setzen.
Pfade
| Variable | Standard | Zweck |
|---|---|---|
TT_DATA_DIR | /app/data | Basisverzeichnis für Datenbank, Audiodateien, Cover, Logs und Schlüssel. |
TT_MUSIK_PFAD | /app/musik | Musikordner für den Bibliothek-Scan. |
TT_IMPORT_PFAD | /app/import | Verzeichnis für den einmaligen Sammlungs-Import. |
Netzwerk & Sicherheit
| Variable | Standard | Zweck |
|---|---|---|
TT_HTTPS | True | Steuert die Cookie-Attribute. True → Secure + SameSite=Strict (Aufruf über HTTPS, auch via Proxy). False → nötig bei reinem HTTP-Zugriff. |
TT_TRUSTED_PROXIES | 1 | Anzahl der Reverse-Proxies davor. 0 = Direktzugriff ohne Proxy. Bestimmt, welche IP der Brute-Force-Schutz sperrt. |
TT_CORS_ORIGINS | (leer) | Nur nötig, wenn das Frontend von einer anderen Herkunft läuft. Standardmäßig ist CORS aus, weil Oberfläche und API von derselben Adresse kommen. |
TT_TRUSTED_PROXIESbitte korrekt setzen. Ein zu hoher Wert — oder1ohne echten Proxy — macht die Client-IP fälschbar und hebelt damit den Brute-Force-Schutz aus.
Betrieb
| Variable | Standard | Zweck |
|---|---|---|
TT_PUID / TT_PGID | 1000 | UID/GID, mit der die App läuft und der /app/data gehört. |
TT_LOG_LEVEL | INFO | DEBUG, INFO, WARNING, ERROR, CRITICAL. |
TT_GUNICORN_WORKERS | 1 | Worker-Prozesse. Ein Worker mit vielen Threads ist für die SQLite-Datenbank stabiler als mehrere. |
TT_GUNICORN_THREADS | 8 | Threads pro Worker. |
TT_DLNA_TMPFS | (automatisch) | Ablageort der DLNA-Transkodate. Normalerweise nicht setzen — der Server wählt selbst. |
Cron-Zeitpläne gibt es hier bewusst nicht. Welche Wartungs-Tasks wann laufen, pflegst du zur Laufzeit in der Oberfläche (siehe Server verwalten).
Server-Einstellungen
Zu finden unter Server-Einstellungen in der Admin-Oberfläche, sortiert nach Rubriken. Änderungen greifen ohne Neustart.
| Rubrik | Was du dort einstellst |
|---|---|
| Überblick | Live-Status des Servers: Bibliotheksgröße, Speicher, Cache-Trefferquote, Laufzeit, Version — und als erste Karte der Pro-Stand (aktiv oder nicht, bis wann, letzte und nächste Prüfung). |
| Benutzer | Konten anlegen, Rechte vergeben, Betreuer zuordnen. → Benutzer & Rechte |
| Zeitzone | IANA-Zeitzone des Servers. Standard ist Europe/Berlin. |
| Anmeldung & Sitzungen | Wie lange Benutzer angemeldet bleiben (Tage). Der Takt, in dem der Zugang im Hintergrund erneuert wird (Minuten), steht darunter unter Erweitert — er ist ein Sicherheits-Detail, von dem im Alltag niemand etwas merkt. |
| Brute-Force-Schutz | Zeitfenster, erlaubte Fehlversuche, Sperrdauer. |
| Cover & Interpret-Bilder | Die Bildqualität als eine Auswahl — sparsam, ausgewogen oder hoch — setzt alle sechs Maße und die Cover-Qualität auf einmal. Die Einzelwerte (drei Cover-Kantenlängen, drei Interpret-Bild-Höhen) lassen sich darunter aufklappen, wenn es genauer sein muss. Nach dem Speichern — und ebenso nach einem Zurücksetzen — fragt Tunetorch, ob die bestehenden Bilder neu erzeugt werden sollen (sie behalten sonst ihre bisherige Auflösung) → Server verwalten. Ganz unten: wie viele Vorschau-Treffer eine Internet-Bildsuche zunächst lädt. |
| Audio-Upload | Ziel-Bitrate für Opus und die maximale Dateigröße. Eine Anfrage darf insgesamt das Vierfache davon umfassen — das ergibt sich aus der Dateigröße und ist nicht getrennt einstellbar. |
| Metadaten normalisieren | Regeln für Großschreibung und verbotene Zeichen, je Feld einzeln. Dazu der Auflösungs-Vorschlag für zusammengesetzte Interpreten — abschaltbar, dann schweigen Editoren und Metadaten-Assistent dazu. |
| Hörbücher | Welche Genres als Hörbuch behandelt werden. → Hörbücher |
| DLNA | Master-Schalter, Server-Adresse fürs Heimnetz, Geräte und Zugriffslisten. → Casting |
| Wartung & Cron-Tasks | Welche Tasks laufen, in welchem Intervall oder zu welcher Uhrzeit. |
| Zum Löschen vorgemerkt | Titel und Konten, die auf ihre endgültige Löschung warten. |
| Erweitert | Zwei Tempo-Schrauben, die im Normalbetrieb nichts brauchen: die Pause zwischen den Teilschritten langer Jobs (Scan, Lautheit, Upload — je höher, desto schonender für den Server) und das Speicherlimit des Zwischenspeichers. Lohnt sich, wenn der Server unter Last träge wird. |
| Export-Sitzungen | Laufende und fertige Exporte, plus der Gesamt-Datenbank-Export (Pro). |
| Tunetorch Pro | Aktivierungs-Code eintragen (das Feld steht nur, solange der Server nicht verbunden ist) und Lizenz-Status prüfen; bei aktivem Abo zusätzlich Name dieses Servers — wie sich deine Installation nennt, statt „Tunetorch“ etwa „Familie Schmitt Musik“ (→ unten). Den Aktivierungs-Code verwaltet, wem der Server gehört — weitere Admins sehen im Reiter nur den Server-Namen. → Tunetorch Pro |
Standardwerte zurücksetzen
Jede Rubrik trägt im Kopf einen ↺-Knopf. Er bleibt unauffällig, solange alle Werte auf
dem Standard stehen, und färbt sich in die Akzentfarbe, sobald einer abweicht — auch bei
zugeklappter Rubrik. Ein Klick zeigt vor dem Speichern, was sich ändert (aktuell → Standard).
Praktischer Nebeneffekt: Weil der Standard direkt vom Server kommt, übernimmt eine bestehende Installation per Klick auch einen später geänderten Standardwert.
Denselben Knopf gibt es übrigens in den Benutzer-Einstellungen jedes Kontos.
Der Name deines Servers
Standardmäßig heißt deine Installation überall „Tunetorch“. Mit einem aktiven Pro-Abo gibst du ihr unter Server-Einstellungen → Tunetorch Pro → Name dieses Servers einen eigenen Namen — etwa „Familie Schmitt Musik“. Ein leeres Feld bedeutet „Tunetorch“.
Ohne aktives Abo ist die Rubrik nicht da. Das ist kein Verlust: Ohne Pro meldet sich der Server ohnehin wieder als „Tunetorch“, das Feld hätte also nichts zu zeigen, was gerade gilt. Dein eingetragener Name bleibt unangetastet gespeichert und steht mit dem Abo unverändert wieder da.
Wo der Name erscheint:
| Ort | |
|---|---|
| Kopfzeile der Oberfläche | sofort |
| Titel des Browser-Tabs | sofort |
| Anmeldeseite | sofort — siehe Hinweis unten |
| Name der installierten Web-App (PWA) | erst ab der nächsten Installation |
| Name der Android-App im Startbildschirm | gar nicht — siehe unten |
Der Name steht auf der Anmeldeseite, also vor dem Login. Wer die Adresse deines Servers kennt, sieht ihn, ohne sich anzumelden — und genau dafür ist er da: Er soll begrüßen, nicht erst nach dem Passwort auftauchen. Wenn du das nicht möchtest, lässt du das Feld leer; dann steht dort weiterhin „Tunetorch“. Deine Musik und deine Daten sind davon nicht berührt, es ist ausschließlich dieser eine Text.
Eine bereits installierte Web-App behält ihren alten Namen. Der Name unter dem Symbol auf dem Homescreen wird beim Installieren festgelegt; Browser übernehmen eine spätere Änderung verzögert oder gar nicht. Wer den neuen Namen dort sehen will, entfernt die installierte App und installiert sie erneut.
Die Android-App heißt weiterhin „Tunetorch“ — und das ändert sich auch nicht. Sie kann mehrere Server verwalten; bei drei hinterlegten Installationen gäbe es keine richtige Antwort darauf, welcher Name auf dem Startbildschirm stehen soll. Der Name gehört der App, nicht einem der Server, die sie anzeigt. Innerhalb der App siehst du deinen Server-Namen ganz normal in der Kopfzeile.
Läuft dein Abo aus, meldet sich der Server wieder als „Tunetorch“ — dein eingetragener Name bleibt dabei gespeichert und ist sofort wieder da, sobald Pro zurück ist.
Zeitzone
Der Server läuft standardmäßig in Europe/Berlin. Die Zeitzone wird nicht per
Docker-Variable gesetzt, sondern in der Oberfläche (Server-Einstellungen → Zeitzone) aus der
vollständigen IANA-Liste gewählt — wer woanders sitzt, stellt sie dort einmal um.
Sie beeinflusst Log-Zeitstempel, alle Datumsangaben und die festen Uhrzeiten der Wartungs-Tasks. Eine Änderung greift sofort.
Reverse-Proxy & HTTPS
Für den Zugriff aus dem Internet — und für die installierbare PWA — brauchst du einen
Reverse-Proxy mit TLS-Zertifikat. Er leitet auf Port 5000 des Containers weiter.
Caddy (kümmert sich selbst um das Zertifikat):
musik.example.com {
reverse_proxy 127.0.0.1:5000
}
Nginx:
server {
server_name musik.example.com;
listen 443 ssl;
location / {
proxy_pass http://127.0.0.1:5000;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 300s;
}
}
Wichtig ist der X-Forwarded-For-Header: Daraus liest Tunetorch die echte Client-IP für den
Brute-Force-Schutz. Wie viele Proxies davorstehen, sagst du über TT_TRUSTED_PROXIES
(Standard 1).
Große Uploads brauchen unter Nginx zusätzlich ein passendes
client_max_body_size.
Aufbau des Datenverzeichnisses
/app/data/
├── db/ die SQLite-Datenbank (WAL)
├── backups/ Sicherungskopien der Datenbank (automatisch vor Schema-Updates)
├── audio/ hochgeladene Originaldateien + Metadaten-Sicherung (.txt)
├── audio_cache/ konvertierte Fassungen (wird automatisch begrenzt)
├── cover/ Cover in vier Größen
├── interpret_hero/ Künstlerbilder
├── person_hero/ Personenfotos
├── logs/ Server-Logs (rotierend)
├── jwt/ Signaturschlüssel der Anmeldung
├── lizenz/ Zustand der Pro-Lizenz
├── redis/ persistente Sicherheitsdaten (Sperren, Token-Sperrliste)
├── upload_temp/ laufende Upload-Sitzungen
└── temp/ Exporte und kurzlebige Zwischendateien
Für ein Backup genügt dieses eine Verzeichnis — siehe Sicherheit & Datensicherung.