mirror of
https://github.com/blakeblackshear/frigate.git
synced 2024-11-21 19:07:46 +01:00
370276a7b6
* fix makefile variable * add branch for testing * fix arm32 build * use amd64 for web build * install wheels in a separate layer for better parallel builds * try build-push-action * try using gh context * use short sha * cleanup
173 lines
4.7 KiB
Docker
173 lines
4.7 KiB
Docker
# syntax=docker/dockerfile:1.2
|
|
|
|
# https://askubuntu.com/questions/972516/debian-frontend-environment-variable
|
|
ARG DEBIAN_FRONTEND=noninteractive
|
|
|
|
FROM debian:11 AS base
|
|
|
|
FROM debian:11-slim AS slim-base
|
|
|
|
FROM blakeblackshear/frigate-nginx:1.0.2 AS nginx
|
|
|
|
|
|
FROM slim-base AS wget
|
|
ARG DEBIAN_FRONTEND
|
|
RUN apt-get update \
|
|
&& apt-get install -y wget \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
WORKDIR /rootfs
|
|
|
|
|
|
FROM wget AS go2rtc
|
|
ARG TARGETARCH
|
|
WORKDIR /rootfs/usr/local/go2rtc/bin
|
|
RUN wget -qO go2rtc "https://github.com/AlexxIT/go2rtc/releases/download/v0.1-rc.3/go2rtc_linux_${TARGETARCH}" \
|
|
&& chmod +x go2rtc
|
|
|
|
|
|
FROM wget AS models
|
|
|
|
# Get model and labels
|
|
RUN wget -qO edgetpu_model.tflite https://github.com/google-coral/test_data/raw/release-frogfish/ssdlite_mobiledet_coco_qat_postprocess_edgetpu.tflite
|
|
RUN wget -qO cpu_model.tflite https://github.com/google-coral/test_data/raw/release-frogfish/ssdlite_mobiledet_coco_qat_postprocess.tflite
|
|
COPY labelmap.txt .
|
|
|
|
|
|
FROM wget AS s6-overlay
|
|
ARG TARGETARCH
|
|
RUN --mount=type=bind,source=docker/install_s6_overlay.sh,target=/deps/install_s6_overlay.sh \
|
|
/deps/install_s6_overlay.sh
|
|
|
|
|
|
FROM base AS wheels
|
|
ARG DEBIAN_FRONTEND
|
|
ARG TARGETARCH
|
|
|
|
# Use a separate container to build wheels to prevent build dependencies in final image
|
|
RUN apt-get -qq update \
|
|
&& apt-get -qq install -y \
|
|
apt-transport-https \
|
|
gnupg \
|
|
wget \
|
|
&& apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 9165938D90FDDD2E \
|
|
&& echo "deb http://raspbian.raspberrypi.org/raspbian/ bullseye main contrib non-free rpi" | tee /etc/apt/sources.list.d/raspi.list \
|
|
&& apt-get -qq update \
|
|
&& apt-get -qq install -y \
|
|
python3 \
|
|
python3-dev \
|
|
wget \
|
|
# opencv dependencies
|
|
build-essential cmake git pkg-config libgtk-3-dev \
|
|
libavcodec-dev libavformat-dev libswscale-dev libv4l-dev \
|
|
libxvidcore-dev libx264-dev libjpeg-dev libpng-dev libtiff-dev \
|
|
gfortran openexr libatlas-base-dev libssl-dev\
|
|
libtbb2 libtbb-dev libdc1394-22-dev libopenexr-dev \
|
|
libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev \
|
|
# scipy dependencies
|
|
gcc gfortran libopenblas-dev liblapack-dev
|
|
|
|
RUN wget -q https://bootstrap.pypa.io/get-pip.py -O get-pip.py \
|
|
&& python3 get-pip.py "pip"
|
|
|
|
RUN if [ "${TARGETARCH}" = "arm" ]; \
|
|
then echo "[global]" > /etc/pip.conf \
|
|
&& echo "extra-index-url=https://www.piwheels.org/simple" >> /etc/pip.conf; \
|
|
fi
|
|
|
|
COPY requirements.txt /requirements.txt
|
|
RUN pip3 install -r requirements.txt
|
|
|
|
COPY requirements-wheels.txt /requirements-wheels.txt
|
|
RUN pip3 wheel --wheel-dir=/wheels -r requirements-wheels.txt
|
|
|
|
|
|
# Collect deps in a single layer
|
|
FROM scratch AS deps-rootfs
|
|
COPY --from=nginx /usr/local/nginx/ /usr/local/nginx/
|
|
COPY --from=go2rtc /rootfs/ /
|
|
COPY --from=s6-overlay /rootfs/ /
|
|
COPY --from=models /rootfs/ /
|
|
COPY docker/rootfs/ /
|
|
|
|
|
|
# Frigate deps (ffmpeg, python, nginx, go2rtc, s6-overlay, etc)
|
|
FROM slim-base AS deps
|
|
ARG TARGETARCH
|
|
|
|
ARG DEBIAN_FRONTEND
|
|
# http://stackoverflow.com/questions/48162574/ddg#49462622
|
|
ARG APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=DontWarn
|
|
|
|
# https://github.com/NVIDIA/nvidia-docker/wiki/Installation-(Native-GPU-Support)
|
|
ENV NVIDIA_DRIVER_CAPABILITIES="compute,video,utility"
|
|
|
|
ENV FLASK_ENV="development"
|
|
|
|
ENV PATH="/usr/lib/btbn-ffmpeg/bin:/usr/local/go2rtc/bin:/usr/local/nginx/sbin:${PATH}"
|
|
|
|
# Install dependencies
|
|
RUN --mount=type=bind,source=docker/install_deps.sh,target=/deps/install_deps.sh \
|
|
/deps/install_deps.sh
|
|
|
|
RUN --mount=type=bind,from=wheels,source=/wheels,target=/deps/wheels \
|
|
pip3 install -U /deps/wheels/*.whl
|
|
|
|
COPY --from=deps-rootfs / /
|
|
|
|
EXPOSE 5000
|
|
EXPOSE 1935
|
|
EXPOSE 8554
|
|
EXPOSE 8555
|
|
|
|
ENTRYPOINT ["/init"]
|
|
|
|
# Frigate deps with Node.js and NPM for devcontainer
|
|
FROM deps AS devcontainer
|
|
|
|
# Install Node 16
|
|
RUN apt-get update \
|
|
&& apt-get install wget -y \
|
|
&& wget -qO- https://deb.nodesource.com/setup_16.x | bash - \
|
|
&& apt-get install -y nodejs \
|
|
&& rm -rf /var/lib/apt/lists/* \
|
|
&& npm install -g npm@9
|
|
|
|
WORKDIR /workspace/frigate
|
|
|
|
RUN apt-get update \
|
|
&& apt-get install make -y \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
RUN --mount=type=bind,source=./requirements-dev.txt,target=/workspace/frigate/requirements-dev.txt \
|
|
pip3 install -r requirements-dev.txt
|
|
|
|
CMD ["sleep", "infinity"]
|
|
|
|
|
|
# Frigate web build
|
|
# force this to run on amd64 because QEMU is painfully slow
|
|
FROM --platform=linux/amd64 node:16 AS web-build
|
|
|
|
WORKDIR /work
|
|
COPY web/package.json web/package-lock.json ./
|
|
RUN npm install
|
|
|
|
COPY web/ ./
|
|
RUN npm run build
|
|
|
|
# Collect final files in a single layer
|
|
FROM scratch AS rootfs
|
|
|
|
WORKDIR /opt/frigate/
|
|
COPY frigate frigate/
|
|
COPY migrations migrations/
|
|
COPY --from=web-build /work/dist/ web/
|
|
|
|
# Frigate final container
|
|
FROM deps
|
|
|
|
WORKDIR /opt/frigate/
|
|
COPY --from=rootfs / /
|
|
|
|
CMD ["python3", "-u", "-m", "frigate"]
|