Frigate NVR na Proxmox — instalacja, konfiguracja i integracja z Home Assistant
Frigate NVR na Proxmox — instalacja i konfiguracja

Cel i kontekst
Frigate to otwartoźródłowy system NVR (Network Video Recorder) z wbudowaną detekcją obiektów opartą na AI. W przeciwieństwie do klasycznych systemów monitoringu, Frigate nie tylko nagrywa obraz, ale aktywnie analizuje go w czasie rzeczywistym — wykrywając osoby, samochody i inne obiekty.
W moim przypadku Frigate zastąpił brak jakiegokolwiek centralnego systemu zarządzania kamerami. Kamery działały samodzielnie, bez możliwości automatycznego nagrywania przy detekcji, powiadomień czy integracji z resztą homelabiu.
Kamery w instalacji:
- Reolink RLC-502A — kamera zewnętrzna przy drzwiach wejściowych
- Akuvox R20A — wideodomofon (planowana integracja)
Wymagania sprzętowe i systemowe
Serwer (host Proxmox)
- CPU: 2x Intel Xeon E5-2660 v2 (20 rdzeni / 40 wątków łącznie)
- RAM: 120 GB
- System: Proxmox VE
Maszyna wirtualna (Frigate)
| Parametr | Wartość |
|---|---|
| System | Debian 12 (Bookworm) |
| CPU | 6 cores |
| RAM | 6 GB |
| Dysk 1 (system) | 32 GB |
| Dysk 2 (nagrania) | 100 GB, zamontowany jako /media/frigate |
| Typ CPU | host |
| Sieć | VirtIO |
Oprogramowanie
- Docker + Docker Compose
- Frigate 0.17
- qemu-guest-agent
Akcelerator detekcji
Brak dedykowanego akceleratora (Coral USB, iGPU). Detekcja obiektów działa na CPU — wystarczające dla 2 kamer z niskim FPS detekcji.
Uwaga: Xeon E5-2660 v2 to architektura Ivy Bridge EP z obsługą AVX ale bez AVX2. Frigate oznacza detektor jako "wolny" powyżej 100ms — przy tym CPU detekcja zajmuje ok. 120ms, co jest ostrzeżeniem ale nie błędem krytycznym. Przy większej liczbie kamer warto rozważyć akcelerator Coral USB (~150 zł używany).
Instalacja
1. Przygotowanie VM w Proxmox
Tworzenie VM przez interfejs webowy Proxmox:
- Template ISO: Debian 12 netinstall
- CPU type: host (ważne dla wydajności)
- Drugi dysk dodany po instalacji systemu
2. Przygotowanie systemu Debian 12
# Aktualizacja systemu
apt update && apt upgrade -y
# Instalacja qemu-guest-agent
apt install -y qemu-guest-agent
systemctl enable --now qemu-guest-agent
# Weryfikacja
systemctl status qemu-guest-agent
3. Przygotowanie dysku na nagrania
# Sprawdzenie dysków
lsblk
# Formatowanie drugiego dysku (100 GB)
mkfs.ext4 /dev/vdb
# Montowanie
mkdir -p /media/frigate
mount /dev/vdb /media/frigate
# Dodanie do fstab (automount po restarcie)
echo '/dev/vdb /media/frigate ext4 defaults 0 2' >> /etc/fstab
# Weryfikacja
df -h | grep frigate
4. Instalacja Dockera
# Instalacja przez oficjalny skrypt
curl -fsSL https://get.docker.com | sh
# Dodanie użytkownika do grupy docker
usermod -aG docker $USER
# Weryfikacja
docker --version
docker compose version
5. Konfiguracja Frigate
Tworzenie katalogu projektu:
mkdir -p /opt/frigate
cd /opt/frigate
docker-compose.yml
services:
frigate:
container_name: frigate
privileged: true
restart: unless-stopped
image: ghcr.io/blakeblackshear/frigate:stable
shm_size: "128mb"
volumes:
- /etc/localtime:/etc/localtime:ro
- /opt/frigate/config.yml:/config/config.yml
- /media/frigate:/media/frigate
- type: tmpfs
target: /tmp/cache
tmpfs:
size: 1000000000
ports:
- "5000:5000"
- "8554:8554"
- "8555:8555/tcp"
- "8555:8555/udp"
config.yml
mqtt:
enabled: false
detectors:
cpu1:
type: cpu
num_threads: 6
record:
enabled: true
alerts:
retain:
days: 14
detections:
retain:
days: 14
continuous:
days: 0
motion:
days: 0
objects:
track:
- person
- car
cameras:
drzwi_wejsciowe:
enabled: true
friendly_name: Drzwi wejsciowe
ffmpeg:
inputs:
- path: rtsp://admin:<TWOJE_HASLO>@<IP_KAMERY>:554/Preview_01_main
roles:
- record
- audio
- path: rtsp://admin:<TWOJE_HASLO>@<IP_KAMERY>:554/Preview_01_sub
roles:
- detect
detect:
enabled: true
width: 640
height: 480
fps: 2
live:
streams:
Stream 1: drzwi_wejsciowe
version: 0.17-0
go2rtc:
streams:
drzwi_wejsciowe:
- rtsp://admin:<TWOJE_HASLO>@<IP_KAMERY>:554/Preview_01_main
6. Uruchomienie
cd /opt/frigate
docker compose up -d
# Sprawdzenie statusu
docker ps
docker logs frigate --tail 50
Panel webowy dostępny pod: http://IP_VM:5000
Napotkane problemy i rozwiązania
Problem 1: 401 Unauthorized — kamera odrzuca połączenie
Objaw: FFmpeg crashuje w pętli, logi pokazują method DESCRIBE failed: 401 Unauthorized
Przyczyna: Błędne hasło w config.yml po zmianie hasła na kamerze.
Rozwiązanie: Weryfikacja hasła w panelu webowym kamery Reolink i aktualizacja config.yml. Restart kontenera po zmianie.
docker restart frigate
Problem 2: Brak detekcji obiektów
Objaw: Kamera działa, obraz widoczny, ale żadne eventy nie pojawiają się w panelu.
Przyczyna: Brak sekcji detect w konfiguracji kamery w config.yml.
Rozwiązanie: Dodanie sekcji detect z enabled: true do konfiguracji kamery.
Problem 3: Ciągłe nagrywanie mimo wyłączonego continuous
Objaw: Dysk zapełnia się mimo ustawienia continuous: days: 0.
Przyczyna: Parametr motion: days: 7 powoduje nagrywanie przy każdym wykryciu ruchu (nie tylko detekcji obiektów).
Rozwiązanie: Ustawienie motion: days: 0 — nagrywanie tylko przy detekcji person/car.

Problem 4: Wysokie użycie CPU przez FFmpeg (~58%)
Przyczyna: Jeden strumień RTSP używany do wszystkich ról (detect + record + audio) — FFmpeg dekoduje go wielokrotnie.
Rozwiązanie: Rozdzielenie na dwa strumienie:
- główny (Preview_01_main) → record + audio
- substream (Preview_01_sub) → detect
Problem 5: Wolny detektor (120ms)
Przyczyna: Xeon E5-2660 v2 bez AVX2 — ograniczona wydajność przy inferencji modelu AI.
Rozwiązanie: Zmniejszenie FPS detekcji z 5 do 2 i zwiększenie num_threads do 6. Detekcja działa poprawnie mimo ostrzeżenia o wolnym detektorze.
Co działa
- ✅ Podgląd live kamery w panelu webowym
- ✅ Detekcja obiektów: person, car
- ✅ Nagrywanie klipów przy detekcji
- ✅ Przechowywanie nagrań 14 dni
- ✅ Substream do detekcji (niższe obciążenie CPU)
- ✅ Panel webowy z podglądem eventów i pobieraniem klipów
Do zrobienia
- [ ] Dodanie drugiej kamery — Akuvox R20A (wideodomofon)
- [ ] Wystawienie przez Nginx Proxy Manager →
nvr.pckey.pl - [ ] Włączenie MQTT i integracja z Home Assistant
- [ ] Automatyzacje w HA: wykrycie osoby → zapalenie światła
- [ ] Powiadomienia Telegram ze snapshotem przez n8n
- [ ] Rozpoznawanie twarzy przez Double-Take + CompreFace
- [ ] Dodanie streamu RTSP Akuvox do Frigate
- [ ] Zakup Coral USB gdy liczba kamer wzrośnie
Wnioski
Frigate to solidne rozwiązanie dla homelabowców którzy chcą inteligentny monitoring bez chmury. Instalacja przez Docker jest prosta, konfiguracja YAML czytelna, a integracja z Home Assistant otwiera drzwi do pełnej automatyzacji smart home.
Największą wartością jest detekcja obiektów zamiast detekcji ruchu — kamera przy ruchliwej ulicy nie będzie generować setek fałszywych alertów przy każdym przejeżdżającym samochodzie, lecz precyzyjnie wykryje osobę wchodzącą na posesję.
Przy 2 kamerach i detekcji na CPU E5-2660 v2 system działa stabilnie. Przy rozbudowie do 5+ kamer warto zainwestować w akcelerator Coral USB.