Docker
Docker ist die empfohlene Art, den camera.ui-Server auf Linux zu betreiben. Das Image basiert auf Ubuntu 24.04 und bleibt klein: Beim ersten Start lädt und installiert es den Server selbst, sodass Updates kein neues Image brauchen. Es gibt ein Image pro Hardware-Ziel, veröffentlicht als ghcr.io/cameraui/camera.ui.
Bevor du startest
Du brauchst einen Linux-Host mit Docker Engine und dem Compose-Plugin.
Docker Desktop funktioniert nicht
Docker Desktop auf macOS und Windows kann kein Host-Networking nutzen, auf das camera.ui für mDNS und WebRTC angewiesen ist. Nutze auf diesen Plattformen stattdessen die Desktop-App.
Schnellstart
Speichere dies als docker-compose.yml:
name: cameraui
services:
cameraui:
image: ghcr.io/cameraui/camera.ui:latest
container_name: cameraui
restart: unless-stopped
network_mode: host
environment:
- TZ=Europe/Berlin
- CAMERAUI_DOCKER_AVAHI=true
volumes:
- cameraui-data:/data
volumes:
cameraui-data:Starte es:
docker compose up -dÖffne dann https://<host>:3443. Der erste Boot lädt und installiert den Server, was ein paar Minuten dauert. Verfolge das mit docker compose logs -f.
Dein Browser zeigt beim ersten Besuch eine Warnung wegen des selbstsignierten Zertifikats, und die App führt dich anschließend durch die Ersteinrichtung. Was danach kommt, steht unter Erste Schritte.
Erster Boot braucht Internet
Beim ersten Start lädt der Container den Server aus der npm-Registry. Falls dein Host sie nicht auflösen kann, füge dem Service öffentliche DNS-Resolver hinzu (1.1.1.1, 8.8.8.8).
Hardware-Beschleunigung
Das Standard-Image (latest) führt Erkennung und Video-Verarbeitung in Software aus. Für mehr Leistung wählst du den Flavor, der zu deiner Hardware passt, und legst sein Override über die Basisdatei.
| Flavor | Tag | Hardware-Beschleunigung | Arch |
|---|---|---|---|
| CPU | latest | Software | amd64 + arm64 |
| Intel | intel | Quick Sync / VA-API + OpenCL | amd64 |
| NVIDIA | nvidia | NVENC / NVDEC + CUDA | amd64 |
| AMD | amd | Mesa VA-API + OpenCL | amd64 |
Speichere das passende Override neben deiner docker-compose.yml:
name: cameraui
services:
cameraui:
image: ghcr.io/cameraui/camera.ui:intel
devices:
- /dev/dri:/dev/driname: cameraui
services:
cameraui:
image: ghcr.io/cameraui/camera.ui:nvidia
environment:
- NVIDIA_VISIBLE_DEVICES=all
- NVIDIA_DRIVER_CAPABILITIES=all
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu, compute, video, utility]name: cameraui
services:
cameraui:
image: ghcr.io/cameraui/camera.ui:amd
devices:
- /dev/dri:/dev/driStarte dann beide Dateien zusammen (hier Intel):
docker compose -f docker-compose.yml -f docker-compose.intel.yml up -dDer NVIDIA-Flavor benötigt zusätzlich das NVIDIA Container Toolkit auf dem Host. Fertige compose-Dateien für jeden Flavor liegen im Repository cameraui/docker.
Netzwerk
Host-Networking (der compose-Standard) wird empfohlen. camera.ui nutzt es für mDNS / Bonjour (HomeKit-Pairing, ONVIF-Suche) und für die WebRTC-Live-Ansicht. Falls du kein Host-Networking nutzen kannst, veröffentliche stattdessen die Ports unten explizit.
Speicher für Aufnahmen
Standardmäßig liegen Aufnahmen im /data-Volume neben allem anderen. Um sie auf einer separaten, dedizierten Disk zu halten, binde diese ein und richte den NVR darauf aus:
volumes:
- cameraui-data:/data
- /mnt/recordings:/recordings
environment:
- CAMERAUI_PLUGIN_NVR_STORAGE_PATH=/recordingsNutze für /recordings eine dedizierte lokale Disk, keine Netzwerkfreigabe. Siehe Systemanforderungen.
Ports
camera.ui nutzt diese Ports (durch Host-Networking bereits abgedeckt):
| Port | Proto | Zweck |
|---|---|---|
| 3443 | tcp | HTTPS UI / API |
| 2000 | tcp | go2rtc |
| 2001 | tcp | RTSP |
| 2002 | tcp | SRTP |
| 2003 | tcp | RTMP |
| 2004 | tcp / udp | WebRTC |
Daten & Backups
Der gesamte Zustand liegt im cameraui-data-Volume: Konfiguration, Datenbank, Aufnahmen und TLS-Zertifikate. Sichere dieses Volume, um eine Kopie zu behalten. Siehe Backup & Wiederherstellung.
Aktualisieren
Der Server aktualisiert sich innerhalb der App selbst, und die gewählte Version bleibt über Image-Pulls hinweg erhalten. Um das Image selbst zu aktualisieren (OS, GPU-Bibliotheken und Launcher), ziehe es neu und erstelle den Container neu:
docker compose pull
docker compose up -dDetails unter Aktualisieren.