yesod-mirror/k8s/configs/templates/personal/home/frigate-nvr.libsonnet
Copybara 8157b39ea4
Some checks failed
CI / build (push) Failing after 12s
Project import generated by Copybara.
GitOrigin-RevId: 6370f6ea785709295b6abcf9c60717cacf3ac432
2026-01-20 21:26:21 +00:00

227 lines
5.5 KiB
Jsonnet

local kube = import "k8s/configs/base.libsonnet";
local linuxserver = import "k8s/configs/templates/core/linuxserver.libsonnet";
local images = import "k8s/configs/images.libsonnet";
local probe(delaySeconds) = {
initialDelaySeconds: delaySeconds,
periodSeconds: 20,
tcpSocket: {
port: "http",
},
};
local WebPort = 5000;
local RtspPort = 8554;
local Params = kube.simpleFieldStruct([
"namespace",
"name",
"filePath",
"dbClaimName",
"configClaimName",
"storageClaimName",
"mqttAddress",
"rtspNodePort",
//"ingressHost",
"frigateRtspPwd",
"frigateGarageSourceRtsp",
]) {
local rtmpPort = 1935,
labels: {},
gatekeeperSidecar: null,
configMapName: $.name + "-config",
lsParams: linuxserver.AppParams {
name: $.name,
namespace: $.namespace,
filePath: $.filePath,
templatePath: std.thisFile,
baseAppName: "frigate",
imageName: "blakeblackshear/frigate",
labels+: $.labels,
gatekeeperSidecar: $.gatekeeperSidecar,
isPrivileged: true,
services: [
linuxserver.Service {
suffix: "ui",
spec: {
type: "ClusterIP",
ports: [
kube.SvcUtil.TCPServicePort("http", 80) {
targetPort: WebPort
},
kube.SvcUtil.TCPServicePort("rtmp", rtmpPort) {
targetPort: rtmpPort
},
],
},
},
linuxserver.Service {
suffix: "rtsp",
spec: kube.SvcUtil.BasicNodePortSpec(RtspPort, $.rtspNodePort),
},
],
nodeSelector: {
"has_coral": "true"
},
ports: [
kube.DeployUtil.ContainerPort("http", WebPort),
kube.DeployUtil.ContainerPort("rtmp", rtmpPort),
kube.DeployUtil.ContainerPort("rtsp", RtspPort),
],
env: linuxserver.Env {
others: [
kube.NameVal("FRIGATE_RTSP_PASSWORD", "acmcarther"),
]
},
pvcs: [
linuxserver.Pvc{
name: "frigate-db",
mountPath: "/db",
bindName: $.dbClaimName,
},
linuxserver.Pvc{
name: "frigate-config",
mountPath: "/config",
bindName: $.configClaimName,
},
linuxserver.Pvc{
name: "frigate-storage",
mountPath: "/media",
bindName: $.storageClaimName,
},
],
// This was removed 2024-10-05
/*
configMaps: [
linuxserver.ConfigMap {
name: "config",
mountPath: "/config",
bindName: $.configMapName,
},
],
*/
hostPaths: [
linuxserver.HostPath{
name: "usb",
hostPath: "/dev/bus/usb",
mountPath: "/dev/bus/usb",
},
],
emptyDirs: [
linuxserver.EmptyDir {
name: "dshm",
mountPath: "/dev/shm",
medium: "Memory",
},
],
resources: {
requests: {
cpu: "400m",
memory: "2028Mi",
},
limits: {
cpu: "1500m",
memory: "4096Mi",
},
},
livenessProbe: probe(/*delaySeconds=*/60),
readinessProbe: probe(/*delaySeconds=*/60),
},
};
local ConfigMap(params) = kube.ConfigMap(params.namespace, params.name + "-config") {
data: {
"config.yml": |||
database:
path: "/db/frigate.db"
mqtt:
host: %(mqttAddress)s
port: 80
detectors:
coral:
type: edgetpu
device: usb
objects:
track:
- person
- bear
- cat
- mouse
- dog
ffmpeg:
output_args:
record: preset-record-generic-audio-aac
go2rtc:
rtsp:
username: "acmcarther"
password: "%(frigateRtspPwd)s"
streams:
garage_rtsp_cam_live:
# subtype=0 is main stream with audio
- "%(frigateGarageSourceRtsp)s&subtype=0"
- "ffmpeg:garage_rtsp_cam_live#audio=opus"
cameras:
garage:
live:
stream_name: garage_rtsp_cam_live
ffmpeg:
# Configure output for restream
output_args:
record: preset-record-generic-audio-copy
inputs:
- path: rtsp://127.0.0.1:8554/garage_rtsp_cam_live
input_args: preset-rtsp-restream
roles:
- record
# subtype 1 is substream without audio
- path: "%(frigateGarageSourceRtsp)s&subtype=1"
roles:
- restream
# subtype 2 is substream for detection
- path: "%(frigateGarageSourceRtsp)s&subtype=2"
roles:
- detect
detect:
width: 1280
height: 720
zones:
street:
coordinates: 1280,0,1280,316,1130,316,824,270,631,196,503,0
objects:
- bear
driveway:
coordinates: 0,720,1280,720,1280,414,752,257,577,154,0,144
objects:
- person
- cat
- bear
- mouse
record:
enabled: True
events:
retain:
default: 7
mode: active_objects
snapshots:
enabled: True
timestamp: True
||| % {
mqttAddress: params.mqttAddress,
frigateRtspPwd: params.frigateRtspPwd,
frigateGarageSourceRtsp: params.frigateGarageSourceRtsp,
},
},
};
local App(params) = linuxserver.App(params.lsParams) {
configMap: ConfigMap(params),
};
{
WebPort: WebPort,
RtspPort: RtspPort,
Params: Params,
App(params): App(params),
}