VPS for CCTV: Remote Viewing with Frigate NVR and WireGuard

Quick answer

Frigate NVR runs on local hardware – video decoding requires real CPU or AI accelerator access that a VPS cannot provide. The VPS’s role is providing secure remote access: a WireGuard tunnel lets you view live streams and recorded clips from anywhere without exposing your camera system to the internet. The local hardware costs £100-400; the VPS costs £4-8/month.

Why CCTV needs a VPS (but not for the cameras)

The most common misunderstanding about self-hosted CCTV: the VPS does not stream your cameras. Camera streams require continuous high-bandwidth processing – decoding H.264/H.265 video, running AI object detection, writing recordings to disk. A VPS cannot do this cost-effectively because the CPU time needed would make the VPS expensive and the latency would be poor.

What a VPS does in a self-hosted CCTV system:

  • Provides the WireGuard endpoint that your phone connects to from outside home
  • Routes encrypted RTSP streams from the local NVR to your phone
  • Forwards MQTT-based camera alerts (motion detected, person detected) to notification services

The cameras, the NVR software, the AI detection and the recorded footage all remain at home.

Frigate NVR: the recommended self-hosted option

Frigate is an open-source NVR with built-in AI object detection. It runs as a Docker container on local hardware and integrates directly with Home Assistant via MQTT. It supports any IP camera with an RTSP stream.

Frigate’s AI detection runs on a dedicated accelerator:

  • Google Coral TPU (USB) – widely used, around £40-60
  • Hailo-8L (M.2) – higher performance, preferred for new builds in 2025/2026
  • Intel Quick Sync (built into many NUC/mini PC CPUs) – hardware video decoding without a separate card

Without an accelerator, Frigate falls back to CPU-only detection, which works for 1-3 cameras but limits performance. The Frigate hardware and setup guide covers this in detail.

Architecture: Frigate + VPS + remote access

CAMERAS (RTSP)
    ↓
LOCAL NVR (Frigate on mini PC / Pi)
    │
    ├─ Recordings stored locally
    ├─ MQTT alerts → VPS → notifications (Telegram, SMS)
    └─ RTSP streams available on local network
            ↓
VPS (WireGuard hub)
    ↓
PHONE (WireGuard client)
    → Accesses Frigate web UI and streams through the tunnel

VPS sizing for CCTV remote access

The VPS only passes encrypted tunnel traffic. It does not process video. Sizing is purely about network bandwidth:

Remote viewers Typical use VPS requirement
1-2 users Occasional remote viewing 1 vCPU, 512MB RAM, 500GB/month bandwidth
3-10 users Regular remote access 2 vCPU, 1GB RAM, 1TB/month bandwidth

HD camera streams typically require 1-4 Mbps per stream. Check your VPS provider’s monthly bandwidth allowance. LumaDock includes 2TB/month bandwidth at no extra cost.

Replacing Ring, Nest and Arlo subscriptions

Ring, Nest Aware and Arlo Secure subscriptions cost £5-15/month for video storage. They store your footage on the manufacturer’s servers. A Frigate setup stores footage locally with no subscription:

Frigate + VPS Ring Protect Nest Aware
Monthly cost £4-8 (VPS only) £4-8/month per camera £8/month
Data ownership Local, yours Amazon servers Google servers
AI detection Custom (Frigate) Ring’s only Google’s only
Camera choice Any RTSP camera Ring cameras only Nest cameras only

Setting up MQTT alerts from Frigate through the VPS

Frigate publishes detection events to MQTT topics (frigate/events, frigate/{camera}/person etc.). These go to Mosquitto on the VPS. Node-RED subscribes and sends notifications:

# Frigate config.yml (MQTT section)
mqtt:
  host: your-vps-domain.com
  port: 8883
  user: frigate
  password: frigate-mqtt-password
  tls_ca_certs: /config/ca.pem

Node-RED flow: MQTT in (topic: frigate/+/person) → filter (score > 0.7) → send Telegram/SMS alert.

Bandwidth planning for remote CCTV viewing

Camera stream quality determines how much bandwidth flows through the VPS tunnel during remote viewing. Sub-streams (typically 640×480 at 15fps) use 200-500 Kbps. Main streams (1080p at 25fps) use 2-4 Mbps. For remote access, the sub-stream is usually sufficient and keeps bandwidth requirements low. Frigate is configured with two streams per camera precisely to serve this dual-purpose: high-quality main stream for local recording, low-bandwidth sub-stream for real-time detection and remote viewing.

MQTT alerts from Frigate: practical configuration

Frigate publishes detailed event data to MQTT when objects are detected. A well-configured Node-RED flow on the VPS subscribes to frigate/events, filters for person detections with a score above 0.75, and sends a notification with a snapshot link via Telegram or SMS. The alert arrives within 2-5 seconds of the person entering the camera’s field of view. This replaces the cloud notification services that Ring and Nest provide, without any subscription or data leaving your own infrastructure.

Legal considerations for CCTV in the UK

Under UK GDPR and the ICO’s 2026 IoT guidance, CCTV that captures images of identifiable people (neighbours, members of the public on the pavement) makes the operator a data controller. This requires visible signage, a documented retention period (Frigate’s clip retention settings serve this purpose), and a clear stated purpose. Self-hosting your CCTV on a VPS is a genuine compliance advantage: you control exactly what data is retained, for how long, and who can access it, without relying on a manufacturer’s data processing policies. See UK GDPR and IoT Data for the full picture.

Remote CCTV access for £4.53/monthLumaDock VPS as your WireGuard tunnel endpoint. Keep footage local; access it from anywhere.
See LumaDock plans →

Home Assistant integration with Frigate

The Frigate integration for Home Assistant (available as a custom component via HACS) exposes all Frigate cameras, detected objects and events as Home Assistant entities. This means camera states, motion events and person detection triggers become available for Home Assistant automations: turn on lights when a person is detected, send a notification when the front door camera sees motion after midnight, or display a camera feed in a Lovelace dashboard card. The integration communicates via MQTT, so the Mosquitto broker on the VPS carries all Frigate-to-HA messages.

Frequently asked questions

Can I run Frigate on the VPS?

Not usefully. Frigate requires access to the camera RTSP streams (only available on your local network) and hardware acceleration for AI detection (not available on a standard VPS). Frigate must run on hardware with direct local network access to the cameras.

What cameras work with Frigate?

Any IP camera that provides an RTSP stream. This includes most branded cameras (Reolink, Hikvision, Dahua, Amcrest) and generic Chinese cameras. Ring, Nest and Arlo cameras do not provide RTSP access and cannot be used with Frigate.

How much local storage does Frigate need?

This depends on the number of cameras, resolution and retention period. At 1080p with H.264, plan for roughly 1-2GB per camera per hour of continuous recording. A 4-camera system with 7-day retention at moderate resolution needs around 1-2TB. Frigate also supports clip-only recording (saves clips when motion or objects are detected), which significantly reduces storage needs.

Does this replace a traditional DVR/NVR appliance?

For technically capable users, yes. Frigate on a mini PC offers more flexibility than a dedicated DVR: custom AI detection, Home Assistant integration, MQTT alerts and no subscription. For users who want a simple plug-in-and-forget system, a traditional NVR may be more appropriate.

What is the minimum hardware for a Frigate NVR?

A Raspberry Pi 4 (4GB) with a Coral USB TPU handles 2-4 cameras. For 4-8 cameras, a mini PC with an Intel N100 processor (hardware video decoding via Quick Sync) and optionally a Coral or Hailo accelerator is the recommended starting point.