飞牛OS+显卡直通+Docker部署Frigate教程
前言
我之前的NAS一直用的CasaOS,最近看到飞牛OS挺火的,特别是它自带的飞牛影视功能很吸引人。毕竟Emby和Plex都要付费,折腾开心版又太麻烦,索性就转到了飞牛OS体验一下。
装好飞牛OS之后,顺便就想把之前一直在玩的Frigate也部署上。Frigate是一个开源的、支持实时目标检测的NVR(网络视频录像机),能识别人、猫、狗、车等目标,还能联动Home Assistant,是智能家居安防的利器。

我的环境比较特殊:飞牛OS是装在ESXi虚拟机里的,先晒一下我运行马上600天的洋垃圾。我通过PCIe直通把一张NVIDIA P400直通进来。说实话P400应付Frigate还是比较吃力的,毕竟这是一张入门级的亮机卡,但好在能跑起来,GPU加速带来的CPU减负效果依然很明显。如果你的显卡更好(比如RTX系列),体验会好很多。
折腾了一番终于跑通了,今天就把整个过程分享给大家。如果你也在飞牛OS上用NVIDIA显卡跑Frigate,希望这篇教程能帮到你。
本篇你将学到:飞牛OS中安装NVIDIA驱动和Container Toolkit、Docker Compose部署Frigate并实现NVIDIA GPU直通、Frigate配置文件详解(ONNX模型 + YOLOX)、go2rtc直播流配置、在WebUI中创建检测区域、常见问题排错。
一、前置条件
开始之前,请确认以下条件:
1. 飞牛OS已安装并正常运行(我的版本是fnOS最新版,装在ESXi虚拟机中)
2. NAS上有NVIDIA显卡(我用的是P400,Turing架构及以上如RTX系列推荐)

3. 如果是虚拟机环境,需要将显卡通过PCIe直通给飞牛OS
4. 已开启SSH访问(方便命令行操作)
5. 有基本的Docker和Linux知识
6. 网络摄像头的RTSP地址已获取(海康/大华等品牌可通过SADP工具或摄像头后台查看)
二、安装NVIDIA驱动和Container Toolkit(关键步骤!)
飞牛OS的应用中心已经贴心地提供了NVIDIA相关套件,安装起来非常方便。
2.1 安装 NVIDIA-driver-580
打开飞牛OS的应用中心,搜索NVIDIA,找到NVIDIA-driver-580(或更新版本的驱动),点击安装即可。
安装完成后,通过SSH连接到NAS,验证驱动是否正常:
nvidia-smi
如果能看到显卡信息和驱动版本号,说明驱动安装成功。
2.2 安装 NVIDIA Container Toolkit
同样在飞牛OS的应用中心搜索并安装NVIDIA Container Toolkit。这个工具的作用是让Docker容器能够访问宿主机的NVIDIA GPU。
安装完成后,验证Docker是否能识别GPU:
docker run --rm --runtime=nvidia --gpus all nvidia/cuda:12.0-base nvidia-smi
如果能正常输出GPU信息,说明Container Toolkit配置成功。
三、下载YOLOX模型
Frigate 0.17版本支持多种检测模型,这里我们使用YOLOX的ONNX格式模型。先创建模型存放目录,再下载模型文件:
# 创建模型缓存目录(compose构建时也会自动创建相关目录)
mkdir -p /vol1/appshare/frigate/config/model_cache
cd /vol1/appshare/frigate/config/model_cache
# 下载YOLOX-S模型(约30MB)
wget https://github.com/Megvii-BaseDetection/YOLOX/releases/download/0.1.1rc0/yolox_s.onnx
如果你的网络访问GitHub较慢,可以挂代理或先在电脑上下载后通过SFTP上传到NAS的对应目录。
四、编写 docker-compose.yml
在飞牛OS中,你可以通过Docker的"项目"功能(即docker-compose)来部署Frigate。以下是我使用的compose文件:
version: "3.9"
services:
frigate:
container_name: frigate
image: ghcr.io/blakeblackshear/frigate:0.17.0-tensorrt
restart: unless-stopped
privileged: true
shm_size: "512mb"
runtime: nvidia
volumes:
- /etc/localtime:/etc/localtime:ro
- /vol1/appshare/frigate/config:/config
- /vol1/appshare/frigate/video:/media/frigate
- type: tmpfs
target: /tmp/cache
tmpfs:
size: 1000000000
ports:
- "8971:8971" # Web UI(推荐,SSL加密+用户认证)
- "8554:8554" # RTSP直播流
- "8555:8555/tcp" # WebRTC
- "8555:8555/udp" # WebRTC
environment:
NVIDIA_VISIBLE_DEVICES: all
关键配置项说明
image:使用 0.17.0-tensorrt 标签,内置TensorRT支持,NVIDIA显卡必选。
runtime: nvidia:告诉Docker使用NVIDIA运行时,实现GPU直通。
shm_size: "512mb":共享内存大小,Frigate处理视频流需要较大共享内存,建议至少256MB。
NVIDIA_VISIBLE_DEVICES: all:让容器能看到所有GPU,如果只有一张卡填 all 即可。
privileged: true:特权模式,某些情况下GPU访问需要此权限。
tmpfs:将缓存放在内存中,提升读写性能,1GB大小足够。
端口说明(重要!)
8971端口(推荐使用):这是Frigate新版Web UI的入口,支持SSL加密连接,并且有用户认证机制(首次访问会要求你创建管理员账号密码)。日常使用请统一通过这个端口访问,安全可靠。
5000端口(不建议开启):这是Frigate的旧版API端口,没有任何用户认证,属于裸奔状态。如果你的NAS在内网还好,但一旦暴露到公网会有严重的安全风险。所以我这里直接没有映射这个端口,建议大家也跳过它。
8554端口:go2rtc RTSP转发流。8555端口:WebRTC低延迟直播。
五、编写 Frigate 配置文件
在 /vol1/appshare/frigate/config/ 目录下创建 config.yml,这是Frigate的核心配置文件:
# ============ MQTT配置 ============
mqtt:
enabled: true
host: 10.0.2.232 # 替换为你的MQTT Broker地址
# 如果你的MQTT Broker设置了用户名密码,取消下面的注释:
# user: your_mqtt_username
# password: your_mqtt_password
# ============ 检测器配置 ============
detectors:
onnx:
type: onnx
# ============ 目标追踪 ============
objects:
track:
- person
- cat
# ============ 快照设置 ============
snapshots:
enabled: true
timestamp: false
clean_copy: false
bounding_box: true
retain:
default: 10
quality: 95
detect:
enabled: true
record:
enabled: true
continuous:
days: 0
alerts:
retain:
days: 3
mode: motion
# ============ 模型配置 ============
model:
model_type: yolox
width: 640
height: 640
input_tensor: nchw
input_dtype: float_denorm
path: /config/model_cache/yolox_s.onnx
labelmap_path: /labelmap/coco-80.txt
# ============ 摄像头配置 ============
cameras:
diaozhuang:
enabled: true
ffmpeg:
inputs:
- path: rtsp://admin:你的密码@10.1.1.1:8554/Streaming/Channels/101
roles:
- detect
live:
streams:
Stream 1: diaozhuang
ffmpeg:
hwaccel_args: preset-nvidia
version: 0.17-0
go2rtc:
streams:
diaozhuang:
- rtsp://admin:你的密码@10.0.2.67:8554/Streaming/Channels/101
lpr:
enabled: false
classification:
bird:
enabled: false
配置要点解析
1. MQTT配置
MQTT用于将Frigate的检测事件推送给Home Assistant或其他智能家居平台。如果你的MQTT Broker(比如HA自带的Mosquitto)设置了用户名和密码认证,需要在配置中加上 user 和 password 字段:
mqtt:
enabled: true
host: 10.0.2.232
user: your_mqtt_username
password: your_mqtt_password
如果你的MQTT Broker没有设置认证(比如测试环境),可以省略 user 和 password。
2. 检测器选择:这里使用 onnx 类型的检测器。如果你的NVIDIA显卡支持TensorRT,也可以切换为 tensorrt 类型,推理速度更快。ONNX通用性很好,兼容性更强。
3. 模型配置:model 部分指定了YOLOX-S模型,输入分辨率640x640。
4. 硬件加速:ffmpeg.hwaccel_args: preset-nvidia 是关键配置,告诉FFmpeg使用NVIDIA的NVDEC来解码视频流,大幅降低CPU占用率。
5. go2rtc:Frigate内置的流转发服务,将RTSP流转为低延迟的WebRTC流。go2rtc中的RTSP地址和camera配置中的地址可以不同(比如一个主码流一个子码流)。
六、启动Frigate
通过飞牛OS的Docker图形界面来启动:
1. 打开飞牛OS的 Docker 应用
2. 进入"项目"页面
3. 点击"新增项目"
4. 项目名称填写 frigate
5. 路径选择你存放 docker-compose.yml 的目录
6. 将上面的compose内容粘贴进去
7. 点击"构建"
首次启动时,Frigate会自动拉取镜像(约2-3GB),耐心等待。启动成功后,你会在日志中看到检测器启动、摄像头处理器启动等信息。
七、访问Frigate Web界面
打开浏览器,访问:https://你的NAS_IP:8971
首次访问时,Frigate会要求你创建管理员账号和密码,请务必记住。登录后进入新版UI界面,你可以在 Live 页面查看实时画面和检测结果,在 Review 页面回顾检测事件和录像,在 Settings 中调整配置,在 Explore 中使用语义搜索功能。
八、在WebUI中创建检测区域
Frigate支持在摄像头画面中划定检测区域(Zone),只有目标进入指定区域才会触发告警,这样可以大大减少误报。比如你只想在有人进入客厅或餐厅时收到通知,而不是走廊经过也算。
创建区域的方法非常直观:
1. 进入Frigate WebUI,打开对应摄像头的设置页面
2. 找到 Zones 配置区域
3. 点击 Add Zone,给区域起个名字(如"客厅"、"餐厅"、"阳台")
4. 在摄像头预览画面上直接拖拽绘制多边形,框出你想要监控的区域
5. 选择该区域要检测的目标类型(如person、cat等)
6. 保存即可
绘制完成后,你还可以在 review 配置中设置 required_zones,指定只有特定区域内的事件才算作告警或回顾对象。这一步完全不需要手动写坐标,WebUI会自动帮你生成对应的配置。
九、MQTT与Home Assistant联动(可选)
如果你使用Home Assistant,可以通过MQTT将Frigate的检测事件推送给HA:
1. 确保HA中已安装 MQTT集成(Add-on中安装Mosquitto Broker)
2. 在Frigate配置的 mqtt 部分填写MQTT的IP地址(如果Mosquitto设了密码,记得加上user和password)
3. 在HA中安装 Frigate集成(通过HACS安装)
4. 配置Frigate集成,填写Frigate的MQTT地址
联动后,你可以在HA中收到人/猫检测的推送通知、用检测事件触发自动化(比如检测到人自动开灯)、在HA仪表板中嵌入Frigate的实时画面。
十、性能参考
我用的是P400这种入门级显卡,应付Frigate其实比较吃力,但开启GPU加速后CPU占用依然明显降低。如果你的显卡更好(比如RTX系列),效果会好很多。具体性能因硬件而异:
CPU占用方面,开启GPU加速后Frigate的CPU占用显著降低。GPU占用取决于摄像头数量和分辨率。内存占用约1-2GB。P400使用ONNX模型跑640x640输入,单帧推理约80-120ms,换用更好的显卡可以降到15-30ms。
相比纯CPU推理,NVIDIA GPU加速带来的提升是非常显著的,即使是P400也能感受到明显的CPU减负。
总结
以上就是在飞牛OS上通过NVIDIA GPU直通 + Docker部署Frigate的完整教程。整体流程并不复杂:
1. 应用中心安装 NVIDIA-driver-580 和 NVIDIA Container Toolkit
2. 下载YOLOX模型文件
3. 编写 docker-compose.yml 和 config.yml
4. 通过Docker项目管理启动容器
5. 访问WebUI,创建检测区域
Frigate的AI检测能力真的很强,配合NVIDIA GPU加速,在NAS上就能跑出一套媲美商用方案的智能监控系统。即使像我这样在ESXi虚拟机里用P400这种入门卡,也能顺利跑起来。如果你也在飞牛OS上折腾Frigate,强烈推荐试试!
有什么问题欢迎评论区交流,也欢迎点赞收藏支持一下!
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~
