2021-01-15 12:54:10 -05:00
|
|
|
# syntax=docker/dockerfile:1.2.1
|
|
|
|
|
|
|
|
# See documentation here:
|
|
|
|
# https://github.com/moby/buildkit/blob/master/frontend/dockerfile/docs/syntax.md
|
|
|
|
|
2021-01-22 17:43:41 -05:00
|
|
|
# "dev-common" is the portion of "dev" (see below) which isn't specific to the
|
|
|
|
# target arch. It's sufficient for building the non-arch-specific webpack.
|
|
|
|
FROM --platform=$BUILDPLATFORM ubuntu:20.04 AS dev-common
|
2021-01-15 12:54:10 -05:00
|
|
|
LABEL maintainer="slamb@slamb.org"
|
|
|
|
ARG BUILD_UID=1000
|
|
|
|
ARG BUILD_GID=1000
|
|
|
|
ENV LC_ALL=C.UTF-8
|
2021-01-22 17:43:41 -05:00
|
|
|
COPY docker/dev-common.bash /
|
|
|
|
RUN /dev-common.bash
|
|
|
|
CMD [ "/bin/bash", "--login" ]
|
|
|
|
|
|
|
|
# "dev" is a full development environment, suitable for shelling into or
|
|
|
|
# using with the VS Code container plugin.
|
|
|
|
FROM --platform=$BUILDPLATFORM dev-common AS dev
|
|
|
|
ARG BUILDARCH
|
|
|
|
ARG TARGETARCH
|
|
|
|
LABEL maintainer="slamb@slamb.org"
|
2021-01-15 12:54:10 -05:00
|
|
|
COPY docker/dev.bash /
|
|
|
|
RUN /dev.bash
|
|
|
|
USER moonfire-nvr:moonfire-nvr
|
|
|
|
WORKDIR /var/lib/moonfire-nvr
|
|
|
|
|
2021-01-22 17:43:41 -05:00
|
|
|
# Build the UI with node_modules and ui-dist outside the src dir.
|
|
|
|
FROM --platform=$BUILDPLATFORM dev-common AS build-ui
|
2021-01-15 12:54:10 -05:00
|
|
|
LABEL maintainer="slamb@slamb.org"
|
2021-01-22 17:43:41 -05:00
|
|
|
WORKDIR /var/lib/moonfire-nvr/src/ui
|
|
|
|
COPY ui /var/lib/moonfire-nvr/src/ui
|
|
|
|
RUN --mount=type=cache,target=/var/lib/moonfire-nvr/src/ui/node_modules,sharing=locked,mode=1777 \
|
|
|
|
yarn install && yarn build
|
2021-01-15 12:54:10 -05:00
|
|
|
|
|
|
|
# Build the Rust components. Note that dev.sh set up an environment variable
|
|
|
|
# in .buildrc that similarly changes the target dir path.
|
2021-01-22 17:43:41 -05:00
|
|
|
FROM --platform=$BUILDPLATFORM dev AS build-server
|
2021-01-15 12:54:10 -05:00
|
|
|
LABEL maintainer="slamb@slamb.org"
|
2021-01-22 17:43:41 -05:00
|
|
|
RUN --mount=type=cache,id=target,target=/var/lib/moonfire-nvr/target,sharing=locked,mode=1777 \
|
|
|
|
--mount=type=bind,source=server,target=/var/lib/moonfire-nvr/src/server,readonly \
|
|
|
|
bash -c 'set -o xtrace && \
|
|
|
|
source ~/.buildrc && \
|
|
|
|
cd src/server && \
|
|
|
|
cargo test && \
|
|
|
|
cargo build --release && \
|
|
|
|
sudo install -m 755 ~/moonfire-nvr /usr/local/bin/moonfire-nvr'
|
2021-01-15 12:54:10 -05:00
|
|
|
|
|
|
|
# Deployment environment, now in the target platform.
|
|
|
|
FROM --platform=$TARGETPLATFORM ubuntu:20.04 AS deploy
|
|
|
|
LABEL maintainer="slamb@slamb.org"
|
|
|
|
ENV LC_ALL=C.UTF-8
|
|
|
|
RUN export DEBIAN_FRONTEND=noninteractive && \
|
|
|
|
apt-get update && \
|
|
|
|
apt-get install --assume-yes --no-install-recommends \
|
|
|
|
ffmpeg \
|
|
|
|
libncurses6 \
|
|
|
|
libncursesw6 \
|
|
|
|
locales \
|
|
|
|
sudo \
|
|
|
|
sqlite3 \
|
|
|
|
tzdata \
|
|
|
|
vim-nox && \
|
|
|
|
apt-get clean && \
|
|
|
|
rm -rf /var/lib/apt/lists/* && \
|
|
|
|
ln -s moonfire-nvr /usr/local/bin/nvr
|
2021-01-22 17:43:41 -05:00
|
|
|
COPY --from=build-server /usr/local/bin/moonfire-nvr /usr/local/bin/moonfire-nvr
|
|
|
|
COPY --from=build-ui /var/lib/moonfire-nvr/ui/dist /usr/local/lib/moonfire-nvr/ui
|
2021-01-15 12:54:10 -05:00
|
|
|
|
2021-01-22 17:43:41 -05:00
|
|
|
# The install instructions say to use --user in the docker run commandline.
|
|
|
|
# Specify a non-root user just in case someone forgets.
|
|
|
|
USER 10000:10000
|
2021-01-15 12:54:10 -05:00
|
|
|
WORKDIR /var/lib/moonfire-nvr
|
|
|
|
ENTRYPOINT [ "/usr/local/bin/moonfire-nvr" ]
|