Files
stream-recorder/docs/konfiguration.md
T

141 lines
5.1 KiB
Markdown

# Konfiguration
## config.yml
![Einstellungen](assets/img4_settings.png)
Die Konfiguration liegt in `data/config.yml` und kann über das Web-UI unter **Einstellungen** bearbeitet werden.
Beim ersten Start wird die Datei automatisch mit Standardwerten erstellt. Eine Vorlage mit Kommentaren findet sich in `bin/config.yml.dist`.
Die Datei enthält Secrets und wird beim Containerstart auf die Rechte `600` gesetzt.
## Abschnitte
### Aufnahme
| Parameter | Standard | Beschreibung |
|-----------|----------|-------------|
| `recording.download_path` | `/app/data/recordings` | Speicherort für Aufnahmen. Muss innerhalb eines Verzeichnisses aus `RECORDING_ROOTS` liegen |
| `recording.max_retries` | `5` | Max. Reconnect-Versuche bei Verbindungsabbruch (0 = unbegrenzt) |
| `recording.retry_delay` | `5` | Wartezeit (Sekunden) zwischen Reconnect-Versuchen |
### Server
| Parameter | Standard | Beschreibung |
|-----------|----------|-------------|
| `server.host` | `0.0.0.0` | Bind-Adresse des Webservers |
| `server.port` | `8484` | Port des Webservers |
Der Abschnitt `server` wird nur aus der Datei gelesen und kann nicht über Web-UI/API geändert werden. Da die Anwendung nicht als root läuft, sind Ports unter 1024 nicht möglich.
### Authentifizierung
| Parameter | Standard | Beschreibung |
|-----------|----------|-------------|
| `auth.enabled` | `true` | Basic Auth aktivieren (erfordert ein Passwort mit mind. 8 Zeichen) |
| `auth.username` | `admin` | Benutzername |
| `auth.password_hash` | _(generiert)_ | PBKDF2-Hash des Passworts |
| `auth.password` | — | Optional: Klartext-Passwort, wird beim Start automatisch in `password_hash` umgewandelt |
Beim ersten Start (keine `config.yml` vorhanden) ist die Anmeldung aktiv. Benutzer ist `admin`, das zufällig erzeugte Passwort wird einmalig im Container-Log ausgegeben:
```bash
docker logs stream-recorder
```
Bestehende Installationen behalten ihre bisherige Auth-Einstellung. Nach 10 fehlgeschlagenen Logins innerhalb von 5 Minuten wird die IP für den Rest des Zeitfensters mit HTTP 429 abgewiesen.
**Passwort vergessen:** In `data/config.yml` den Eintrag `password_hash` durch `password: neues-passwort` ersetzen und den Container neu starten.
### Zeitplan-Puffer
Standardwerte für die Vor- und Nachlaufzeit bei neuen Jobs mit Zeitplan.
| Parameter | Standard | Beschreibung |
|-----------|----------|-------------|
| `schedule.default_pre_buffer` | `5` | Standard-Vorlaufzeit (Minuten) |
| `schedule.default_post_buffer` | `5` | Standard-Nachlaufzeit (Minuten) |
### NTFY
| Parameter | Standard | Beschreibung |
|-----------|----------|-------------|
| `ntfy.url` | _(leer)_ | NTFY Topic-URL (z.B. `https://ntfy.sh/mein-topic`) |
| `ntfy.token` | _(leer)_ | Bearer-Token für authentifizierte Topics (wird von der API nie zurückgegeben) |
| `ntfy.events` | `error` | Kommaseparierte Events: `start`, `stop`, `error`, `upload` |
### Plik
| Parameter | Standard | Beschreibung |
|-----------|----------|-------------|
| `plik.url` | _(leer)_ | Plik-Server URL (z.B. `https://plik.example.com`) |
| `plik.api_key` | _(leer)_ | API Key für authentifizierte Uploads (wird von der API nie zurückgegeben) |
| `plik.ttl` | `30d` | Aufbewahrungsdauer der Uploads (`30d`, `12h`, etc.) |
### Logging
| Parameter | Standard | Beschreibung |
|-----------|----------|-------------|
| `logging.level` | `INFO` | Log-Level: `DEBUG`, `INFO`, `WARN`, `ERROR` |
Anwendungs-Logs erscheinen im Web-UI und zusätzlich auf stdout (`docker logs stream-recorder`). Einträge älter als `LOG_RETENTION_DAYS` Tage werden automatisch gelöscht.
## Umgebungsvariablen
| Variable | Standard | Beschreibung |
|----------|----------|-------------|
| `TZ` | — | Zeitzone (z.B. `Europe/Berlin`) |
| `PUID` | `1000` | UID, unter der die Anwendung läuft |
| `PGID` | `1000` | GID, unter der die Anwendung läuft |
| `RECORDING_ROOTS` | `/app/data/recordings:/recordings` | Erlaubte Basisverzeichnisse für `download_path` (durch `:` getrennt) |
| `LOG_RETENTION_DAYS` | `90` | Aufbewahrung der Log-Einträge in Tagen |
| `ENABLE_API_DOCS` | — | `1` aktiviert die Swagger-UI unter `/docs` |
Der Container startet als root, passt UID/GID des internen Users `app` an `PUID`/`PGID` an, setzt den Besitzer von `data/` und den vorhandenen Verzeichnissen aus `RECORDING_ROOTS` (nur abweichende Dateien) und startet die Anwendung anschließend ohne Root-Rechte.
Eigener Aufnahmepfad, z.B. auf einem separaten Laufwerk:
```yaml
volumes:
- ./data:/app/data
- /mnt/storage/recordings:/recordings
```
Danach in den Einstellungen `download_path` auf `/recordings` setzen. Andere Pfade müssen zusätzlich in `RECORDING_ROOTS` eingetragen werden.
## Beispiel
```yaml
recording:
download_path: /app/data/recordings
max_retries: 5
retry_delay: 5
server:
host: "0.0.0.0"
port: 8484
auth:
enabled: true
username: admin
password: mein-passwort # wird beim Start in password_hash umgewandelt
schedule:
default_pre_buffer: 5
default_post_buffer: 5
ntfy:
url: https://ntfy.sh/stream-recorder
token: ""
events: start,stop,error,upload
plik:
url: https://plik.example.com
api_key: ""
ttl: 30d
logging:
level: INFO
```