[{"data":1,"prerenderedAt":148},["ShallowReactive",2],{"seo-verification":3,"blog-frigate-nvr-self-hosted-vps-en":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-frigate-nvr-self-hosted-vps-en",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":28,"featuredImage":30,"bgImage":31,"posterImage":32,"relatedSolution":30,"intro":33,"sections":34,"ctaTitle":92,"ctaBody":93,"ctaButton":94,"ctaUrl":95,"relatedPosts":96},406,"frigate-nvr-self-hosted-vps",{"fr":12,"en":10,"ar":13,"es":14},"frigate-nvr-surveillance-self-hosted-vps","frigate-nvr-مراقبة-self-hosted-vps","frigate-nvr-vigilancia-self-hosted-vps","Frigate NVR v0.18: self-hosted IP surveillance on a VPS","Deploy Frigate NVR v0.18 on a Linux VPS: AI object detection for IP cameras, 100% local, no cloud or subscription. Full Docker guide with GUI setup and troubleshooting.",11,0,false,"2026-10-02T00:00:00+00:00","2026-10-02T14:03:20+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},7,"Self-hosting","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[29],{"id":23,"name":24,"slug":25,"color":26,"icon":27},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Ffrigate-nvr-surveillance-self-hosted-vps-poster.svg","Frigate NVR is an open-source network video recorder that combines IP camera stream management with AI-powered object detection running entirely on your own infrastructure. Version 0.18 replaces mandatory YAML configuration with a full graphical interface, opening VPS deployment to a far wider audience than terminal-savvy administrators. Your recordings and alerts stay on your machine, with no recurring subscription.",[35,39,51,54,79,82,86,89],{"type":36,"title":37,"body":38},"h2","Local surveillance vs. proprietary cloud: why self-host your NVR","SaaS surveillance solutions — Reolink Cloud, Synology Surveillance Station connected to proprietary relays, Amazon Ring — record your streams on third-party servers. In exchange for a monthly subscription, you get a mobile app, remote storage and event detection. What you give up is control over what happens in front of your cameras.\n\nSelf-hosting your NVR on a VPS reverses the logic: your streams never leave your infrastructure, object detection (people, vehicles, animals) runs locally without sending any image to a third-party service, and recordings are stored on volumes you control. No subscription gates this functionality.\n\nFrigate NVR is the open-source reference in this category. It receives RTSP or RTMP streams from your IP cameras, cuts clips on detected events, retains snapshots and exposes a REST API consumable by Home Assistant or any automation. Version 0.18, released in September 2026, replaces the mandatory `config.yml` file with a full graphical interface: configure cameras, detection zones and thresholds from a browser, without touching YAML if you prefer not to.",{"type":40,"title":41,"items":42},"ul","Concrete benefits of self-hosted Frigate on a VPS",[43,44,45,46,47,48,49,50],"Video streams and recordings 100% local: no third party has access to your footage.","AI object detection (people, vehicles, animals) running on your own CPU, with no API quota or limitation.","Zero recurring subscription: you pay for your VPS, not a detection licence.","Native integration with Home Assistant via MQTT and the Frigate REST API.","Event clips, snapshots and timeline viewable from the Frigate web interface.","Compatible with virtually all IP cameras on the market via the standard RTSP protocol.","Per-camera configurable detection zones to filter false alerts (street, neighbour, tree).","Full GUI configuration since v0.18 — YAML remains possible but is no longer required.",{"type":36,"title":52,"body":53},"Sizing requirements: dimensioning your VPS for Frigate","Frigate is a CPU-intensive application in software-only mode. Object detection relies on a TensorFlow Lite model that runs on each analysed frame. The figures below apply to CPU-only mode, the only option available on a standard VPS.\n\n**For 1 to 2 cameras at 1080p**: 2 vCPU and 2 GB RAM is the functional minimum. Detection will run, but with a noticeable delay on events. Recommended analysis rate: 5 frames per second maximum.\n\n**For 3 to 5 cameras at 1080p**: 4 vCPU and 4 GB RAM provides a comfortable margin. Frigate can sustain 5 fps analysis per camera without saturation. The VPS Power plan (4 vCPU \u002F 8 GB GB RAM) is a realistic baseline for this use case.\n\n**For more than 5 cameras or high analysis rates**: 6 to 8 vCPU and 8 GB RAM or more. Hardware acceleration via a Coral TPU USB or GPU reduces CPU load drastically, but is not available on standard hosted VPS.\n\n**Storage**: each 1080p camera generates on average 1 to 3 GB per hour in continuous recording mode, depending on H.264 or H.265 compression. For 24 hours per camera in event mode (Frigate only retains activity clips), budget 5 to 15 GB per camera per day depending on movement frequency. Plan for an extensible volume or mounted object storage.\n\n**Network**: each incoming RTSP stream consumes between 1 and 4 Mbit\u002Fs depending on resolution and codec. A 1080p H.264 camera typically runs between 1.5 and 2.5 Mbit\u002Fs. Check the bandwidth included in your plan.\n\n**Required software**: Docker Engine 24+ and Docker Compose v2, root access to the VPS, a DNS subdomain pointing to the server IP for HTTPS access, and a reverse proxy (Nginx Proxy Manager, Caddy or Traefik) for TLS termination.",{"type":55,"title":56,"steps":57},"steps","Deploying Frigate NVR with Docker Compose",[58,61,64,67,70,73,76],{"title":59,"body":60},"Create the configuration directory structure","Connect to your VPS via SSH and create the directory structure that Frigate will use for its configuration, recordings and snapshots:\n\n```bash\nmkdir -p \u002Fopt\u002Ffrigate\u002F{config,storage\u002Frecordings,storage\u002Fclips,storage\u002Fexports}\ncd \u002Fopt\u002Ffrigate\n```\n\nFrigate expects its configuration file at `\u002Fopt\u002Ffrigate\u002Fconfig\u002Fconfig.yml`. With v0.18, this file can remain minimal at startup — the GUI completes the configuration afterwards.",{"title":62,"body":63},"Create a minimal startup configuration","Create `\u002Fopt\u002Ffrigate\u002Fconfig\u002Fconfig.yml` with the following content. This file tells Frigate where to store data; cameras and detection settings will be added via the graphical interface:\n\n```yaml\nmqtt:\n  enabled: false\n\nrecord:\n  enabled: true\n  retain:\n    days: 7\n    mode: motion\n\nsnapshots:\n  enabled: true\n  retain:\n    default: 10\n\ndetectors:\n  cpu1:\n    type: cpu\n    num_threads: 3\n```\n\nThe `detectors` key declares a software detector on CPU. `num_threads` controls parallelisation: 3 threads is a good balance for 2 to 4 cameras. Increase it if you have more vCPUs available.",{"title":65,"body":66},"Write the Docker Compose file","Create `\u002Fopt\u002Ffrigate\u002Fdocker-compose.yml` with the following configuration:\n\n```yaml\nservices:\n  frigate:\n    container_name: frigate\n    image: ghcr.io\u002Fblakeblackshear\u002Ffrigate:stable\n    restart: unless-stopped\n    shm_size: \"256mb\"\n    volumes:\n      - \u002Fopt\u002Ffrigate\u002Fconfig:\u002Fconfig\n      - \u002Fopt\u002Ffrigate\u002Fstorage:\u002Fmedia\u002Ffrigate\n      - \u002Fetc\u002Flocaltime:\u002Fetc\u002Flocaltime:ro\n    ports:\n      - \"5000:5000\"\n      - \"8554:8554\"\n      - \"8555:8555\u002Ftcp\"\n      - \"8555:8555\u002Fudp\"\n    environment:\n      FRIGATE_RTSP_PASSWORD: \"changeme\"\n    devices:\n      - \u002Fdev\u002Fdri:\u002Fdev\u002Fdri\n```\n\nExposed ports: **5000** for the web interface and REST API, **8554** for the internal RTSP server (restreaming processed streams), **8555** TCP and UDP for WebRTC (real-time video playback in the browser). The `devices` block enables GPU acceleration on VPS instances that expose it — remove it if iGPU is not available.",{"title":68,"body":69},"Start Frigate and check the logs","From the `\u002Fopt\u002Ffrigate` directory, launch the container and monitor the startup logs:\n\n```bash\ndocker compose up -d\ndocker compose logs -f frigate\n```\n\nOn first start, Frigate downloads the TensorFlow Lite detection model (~6 MB) and initialises its SQLite database. The operation takes 30 to 90 seconds. The log should show `Frigate is running` and the resolution of each declared stream. If a camera does not open, the line `Failed to connect to camera` will identify the problematic stream.\n\nAccess the interface at `http:\u002F\u002F\u003Cyour-vps-ip>:5000` for initial verification (HTTPS will be configured in the next step).",{"title":71,"body":72},"Configure a reverse proxy for HTTPS access","Frigate does not handle TLS natively. Configure Nginx as a reverse proxy. If Nginx is already installed on the VPS, create `\u002Fetc\u002Fnginx\u002Fsites-available\u002Ffrigate`:\n\n```nginx\nserver {\n    listen 443 ssl;\n    server_name frigate.yourdomain.com;\n\n    ssl_certificate \u002Fetc\u002Fletsencrypt\u002Flive\u002Ffrigate.yourdomain.com\u002Ffullchain.pem;\n    ssl_certificate_key \u002Fetc\u002Fletsencrypt\u002Flive\u002Ffrigate.yourdomain.com\u002Fprivkey.pem;\n\n    location \u002F {\n        proxy_pass http:\u002F\u002F127.0.0.1:5000;\n        proxy_http_version 1.1;\n        proxy_set_header Upgrade $http_upgrade;\n        proxy_set_header Connection \"upgrade\";\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_read_timeout 86400;\n    }\n}\n```\n\nObtain a Let's Encrypt certificate with `certbot --nginx -d frigate.yourdomain.com`. The `proxy_read_timeout 86400` directive is required for long-lived WebRTC streams.",{"title":74,"body":75},"Add your cameras via the Frigate v0.18 GUI","Open the Frigate interface in your browser. Version 0.18 provides a camera addition wizard accessible from **Configuration → Cameras → Add Camera**. Fill in:\n\n- **Name** of the camera (no spaces or special characters).\n- **RTSP URL** of the main stream, for example `rtsp:\u002F\u002Fadmin:password@192.168.1.100:554\u002Fstream1`.\n- **Resolution** detected automatically or specified manually.\n- **Detection profile**: *Standard* for a balance between accuracy and CPU load, *Lightweight* for lower-spec VPS instances.\n\nThe GUI generates and validates the corresponding YAML block before applying it to the configuration — you can always switch to raw YAML mode via the **Advanced** tab if you prefer to edit directly.",{"title":77,"body":78},"Verify that recordings and detection are working","From the Frigate dashboard, navigate to **Events** to confirm that detection events are being generated. Check the **Recordings** tab to validate that mp4 files are being written to `\u002Fopt\u002Ffrigate\u002Fstorage\u002Frecordings\u002F`.\n\nOn the VPS, monitor CPU load in real time:\n\n```bash\ndocker stats frigate\n```\n\nFrigate will display container CPU usage. In CPU-only mode with 2 x 1080p cameras at 5 fps analysis, expect 60 to 90% of one vCPU. Adjust the `fps` parameter in each camera configuration if load is too high: `detect.fps: 2` reduces analysis frequency without disabling detection.",{"type":36,"title":80,"body":81},"Configuring cameras and detection zones via the GUI","The central new feature of Frigate v0.18 is its visual detection zone editor. Until v0.14, defining a zone required manually calculating polygon coordinates in the YAML file — a tedious task that discouraged deployments.\n\nSince v0.18, the **Zones** tab for each camera displays the live image and lets you draw polygons directly with your mouse. Each zone receives a name (e.g. `entrance`, `garden`, `street`) and object filters — you can specify that the `street` zone should ignore people but alert on vehicles, or that the `entrance` zone should trigger a notification whenever a person enters the perimeter.\n\n**Motion masks**: the same interface lets you draw masks over zones generating too many false positives — a tree swaying in the wind, a flickering light. The mask prevents Frigate from analysing those pixels for detection, without affecting recording.\n\n**Confidence thresholds**: each detectable object (person, car, dog, cat, bird…) has an adjustable confidence threshold between 0 and 1. The default of 0.5 is reasonable; lowering to 0.35 increases sensitivity at the cost of more false alerts.\n\n**Notification configuration**: Frigate integrates with Home Assistant via MQTT or its REST API. Without Home Assistant, you can send alerts to any webhook via `notify.webhook` or use event clips directly from the interface.",{"type":83,"title":84,"body":85},"tip","Hardening access to the Frigate web interface","The Frigate interface does not include an authentication system in its stable version. Exposed directly to the internet, it is accessible without a password. Three complementary measures to apply before making the subdomain public:\n\n**HTTP Basic authentication via Nginx**: add `auth_basic` and `auth_basic_user_file` to the `location` block of the Nginx virtual host. Generate the password file with `htpasswd -c \u002Fetc\u002Fnginx\u002F.htpasswd your_user`.\n\n**IP restriction**: if you access Frigate from a fixed IP (office, VPN), add `allow 203.0.113.x; deny all;` in the Nginx `location` block to block all external access.\n\n**VPN-only access**: the most robust solution. Deploy WireGuard on the same VPS (or a dedicated VPS) and make port 5000 accessible only locally or via the VPN tunnel. The interface is then never directly exposed to the internet, and no reverse proxy is needed to protect it.",{"type":36,"title":87,"body":88},"Troubleshooting: common errors","**`Failed to connect to camera: Connection refused` or timeout on startup**\nFrigate cannot reach the RTSP stream. First verify the RTSP URL is correct by testing it with `ffprobe` from the VPS: `ffprobe -v quiet -print_format json -show_streams rtsp:\u002F\u002F...`. If the camera is on a private network separate from the VPS, it is not directly reachable — you need a tunnel or RTSP relay.\n\n**`ffmpeg process crashed` looping in logs**\nMost likely: unsupported codec (H.265 \u002F HEVC on a Docker installation without optional libraries) or resolution too high for available bandwidth. Solution: force transcoding at input by adding `input_args: preset-rtsp-restream` to the camera configuration, or reduce camera resolution to 1280×720.\n\n**`Insufficient shared memory` at container startup**\nFrigate uses Linux shared memory to share frames between its processes. The error means `shm_size` is too low. General rule: 256 MB for 2 cameras, 512 MB for 4, 1 GB for 8+. Adjust the `shm_size` directive in `docker-compose.yml` accordingly.\n\n**`Database is locked` or random crashes**\nFrigate uses SQLite, which handles network volumes (NFS, CIFS) poorly. If you mount `\u002Fopt\u002Ffrigate\u002Fstorage` from network storage, move only the SQLite database to a local volume: `db_path: \u002Ftmp\u002Ffrigate.db` in the configuration. Recordings can remain on the remote volume.\n\n**Detection does not trigger despite visible motion**\nFirst check that the detection zone covers the area of interest in the visual editor. Then consult the **Debug** tab for the camera in the GUI: it overlays detection rectangles in real time on the stream. If no rectangles appear, the model is running but finding nothing — the confidence threshold may be too high or objects too small in the camera's field of view.",{"type":36,"title":90,"body":91},"Going further","Frigate NVR turns a standard VPS into a sovereign surveillance station. Object detection runs locally, your recordings stay on your volumes, and v0.18 makes the installation accessible without YAML expertise.\n\nIf you are extending your self-hosted stack, the articles below cover complementary services that integrate well with Frigate from a centralised dashboard: \u003Ca href=\"\u002Fblog\u002Fheberger-jellyfin\">Jellyfin for your media library\u003C\u002Fa>, \u003Ca href=\"\u002Fblog\u002Fheberger-pi-hole\">Pi-hole for DNS filtering\u003C\u002Fa> and \u003Ca href=\"\u002Fblog\u002Fheberger-homepage\">Homepage as a dashboard for all your services\u003C\u002Fa>. un VPS Power covers the majority of 3 to 5 camera CPU-only configurations with headroom for other stack containers.","A VPS for your Frigate NVR","Root access, dedicated IPv4, choice of OS — your camera streams processed locally, without cloud subscriptions or vendor access. Plans from 99 DH\u002Fmonth.","Deploy Frigate on my VPS","\u002Fvps-cloud",[97,117,132],{"id":98,"slug":99,"slugs":100,"title":104,"excerpt":105,"readTime":106,"views":107,"isPinned":19,"publishedAt":108,"updatedAt":109,"category":110,"categories":111,"featuredImage":30,"bgImage":31,"posterImage":113,"relatedSolution":114},84,"host-jellyfin-on-your-own-vps",{"fr":101,"en":99,"ar":102,"es":103},"heberger-jellyfin","استضافة-jellyfin-على-خادمك-الافتراضي-الخاص-vps","alojar-jellyfin-en-un-vps","Self-Hosting Jellyfin on a VPS: Complete 2026 Guide","Deploy Jellyfin on your own VPS with Docker, nginx, HTTPS, plugins, storage options and hardware transcoding. Full guide updated for 2026.",10,5,"2026-03-28T00:00:00+00:00","2026-09-07T11:26:10+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[112],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fheberger-jellyfin-poster.svg",{"categorySlug":115,"appSlug":116},"collaboration-productivity","jellyfin",{"id":118,"slug":119,"slugs":120,"title":124,"excerpt":125,"readTime":106,"views":18,"isPinned":19,"publishedAt":126,"updatedAt":127,"category":128,"categories":129,"featuredImage":30,"bgImage":31,"posterImage":131,"relatedSolution":30},91,"hosting-pi-hole-on-your-own-vps",{"fr":121,"en":119,"ar":122,"es":123},"heberger-pi-hole","استضافة-pi-hole-على-خادم-vps-الخاص-بك","alojar-pi-hole-en-un-vps","Self-hosting Pi-hole on Your Own VPS","Complete guide to deploying Pi-hole v6 on a VPS: installation, fixing the port 53 conflict, Unbound for DNS recursion, whitelisting, metrics and backup.","2026-03-21T00:00:00+00:00","2026-09-24T12:27:51+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[130],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fheberger-pi-hole-poster.svg",{"id":133,"slug":134,"slugs":135,"title":139,"excerpt":140,"readTime":23,"views":141,"isPinned":19,"publishedAt":142,"updatedAt":143,"category":144,"categories":145,"featuredImage":30,"bgImage":31,"posterImage":147,"relatedSolution":30},92,"hosting-homepage-on-your-own-vps",{"fr":136,"en":134,"ar":137,"es":138},"heberger-homepage","استضافة-homepage-على-خادم-vps-الخاص-بك","alojar-homepage-en-un-vps","Hosting Homepage on your own VPS","Deploy Homepage, the open-source dashboard, on your VPS with Docker. Complete guide: YAML architecture, widgets, Caddy\u002FTraefik reverse proxy, SSL, security and backup.",2,"2026-03-20T00:00:00+00:00","2026-09-19T02:00:43+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[146],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fheberger-homepage-poster.svg",1790987753857]