Collection of cookbooks for Podman Quadlets
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

79 lines
3.2 KiB

[Unit]
Description=Frigate - Network video recorder with object detection
Documentation=https://docs.frigate.video/
After=network.target var-lib-virtiofs-data.mount frigate-init.service
Requires=var-lib-virtiofs-data.mount frigate-init.service
# The pull runs in its own unit, and it is Wants=, NOT Requires=. A pull needs
# the registry; starting this container does not, as long as the image is in
# local storage. With Requires=, a boot without network fails the pull, the
# dependency fails, and a failed dependency is never retried: Restart= only
# applies to a unit that started at least once.
#
# After= still orders the pull before this container, so nothing is lost on a
# boot where the network is there.
Wants=frigate-image.service
After=frigate-image.service
# Frigate starts on the configuration file seeded by frigate-init.service, or on
# the one it already owns. Without it, Frigate would write a default one of its
# own, with none of the settings the README lists.
ConditionPathExists=/var/lib/virtiofs/data/frigate/config/config.yml
# Start/stop this unit when the target is started/stopped
PartOf=frigate.target
[Container]
ContainerName=frigate
# The image REFERENCE, and not the name of the frigate.image unit: naming the
# unit makes quadlet generate a Requires= on it, which is the fault described in
# [Unit] above. Podman resolves the reference at start with --pull=missing.
#
# THIS REFERENCE IS ALSO IN frigate.image, and the two must be changed together.
Image=ghcr.io/blakeblackshear/frigate:0.18.2
# Root inside the container: the image starts s6-overlay, which runs nginx,
# go2rtc and Frigate as root. Frigate documents no other way to run.
# Host networking: the cameras push nothing, Frigate pulls their RTSP streams,
# and WebRTC needs the real addresses of the browsers. The listening sockets are
# narrowed by the configuration file instead -- see the README.
Network=host
# Decoded frames are passed between processes in /dev/shm: about 35 MB per
# camera detecting at 720p, plus up to 50 MB of logs and nginx cache. 512 MB
# covers eight cameras and two more. A shm too small shows as "Bus error" in the
# journal.
ShmSize=512m
# Recording segments are written here first, then moved to /media/frigate.
Tmpfs=/tmp/cache:rw,size=1g
# Precious data: configuration, database and model cache on one side,
# recordings on the other. Both on the virtiofs mount, where the host's ZFS
# snapshots and quota apply.
Volume=/var/lib/virtiofs/data/frigate/config:/config:z
Volume=/var/lib/virtiofs/data/frigate/media:/media/frigate:z
# The recordings are named and the review timeline is drawn in local time.
Volume=/etc/localtime:/etc/localtime:ro
# Health check: the request of the image's own HEALTHCHECK, on the internal
# port, which the configuration file binds to the loopback. The image also skips
# the check during an orderly shutdown; that part needs a shell, and the state
# of a container being stopped does not matter.
HealthCmd=curl --fail --silent --show-error http://127.0.0.1:5000/api/version
HealthInterval=30s
HealthTimeout=10s
# The first start converts the detection model, which takes minutes on a CPU.
HealthStartPeriod=300s
HealthRetries=5
[Service]
Restart=always
RestartSec=10
TimeoutStartSec=900
TimeoutStopSec=120
[Install]
WantedBy=frigate.target