Files
fluxer/fluxer_media_proxy/Dockerfile
T

87 lines
3.1 KiB
Docker

# syntax=docker/dockerfile:1.7
ARG DEBIAN_BASE=debian:trixie-slim
ARG RUST_IMAGE=rust:1-trixie
FROM ${RUST_IMAGE} AS builder
WORKDIR /build
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
--mount=type=cache,target=/var/lib/apt,sharing=locked \
apt-get update \
&& apt-get install -y --no-install-recommends \
ca-certificates pkg-config build-essential \
libcurl4-openssl-dev libvips-dev \
libavformat-dev libavcodec-dev libavfilter-dev libavutil-dev libswscale-dev libswresample-dev \
libheif-dev libwebp-dev \
&& rm -rf /var/lib/apt/lists/*
COPY . .
RUN --mount=type=cache,target=/usr/local/cargo/registry \
--mount=type=cache,target=/usr/local/cargo/git \
--mount=type=cache,target=/build/target \
cargo test -p fluxer-media-proxy \
&& cargo build --release -p fluxer-media-proxy \
&& cp target/release/fluxer-media-proxy /usr/local/bin/fluxer-media-proxy
FROM ${DEBIAN_BASE} AS runtime
ARG BUILD_VERSION=""
ARG SOURCE_SHA=""
ARG SOURCE_DATE=""
LABEL org.opencontainers.image.title="fluxer-media-proxy"
LABEL org.opencontainers.image.description="High-throughput media transcoding proxy: libvips + libavformat + libcurl"
LABEL org.opencontainers.image.licenses="AGPL-3.0-or-later"
LABEL org.opencontainers.image.vendor="Fluxer"
LABEL org.opencontainers.image.url="https://fluxer.app"
LABEL org.opencontainers.image.documentation="https://docs.fluxer.app"
LABEL org.opencontainers.image.source="https://github.com/fluxerapp/fluxer"
LABEL org.opencontainers.image.version="${BUILD_VERSION}"
LABEL org.opencontainers.image.revision="${SOURCE_SHA}"
LABEL org.opencontainers.image.created="${SOURCE_DATE}"
LABEL app.fluxer.build-version="${BUILD_VERSION}"
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
--mount=type=cache,target=/var/lib/apt,sharing=locked \
apt-get update \
&& apt-get install -y --no-install-recommends \
ca-certificates tini \
libcurl4t64 libvips42t64 \
libavformat61 libavcodec61 libavfilter10 libavutil59 libswscale8 libswresample5 \
libheif1 libheif-plugin-libde265 libheif-plugin-dav1d \
libwebp7 libwebpmux3 \
libjemalloc2 \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
RUN groupadd --system --gid 10001 fluxer \
&& useradd --system --uid 10001 --gid 10001 --home /var/lib/fluxer --create-home fluxer
COPY --from=builder /usr/local/bin/fluxer-media-proxy /usr/local/bin/fluxer-media-proxy
RUN install -d -o fluxer -g fluxer /var/lib/fluxer/media_proxy_storage
ENV LD_PRELOAD=libjemalloc.so.2
ENV MALLOC_CONF="background_thread:true,metadata_thp:auto,dirty_decay_ms:5000,muzzy_decay_ms:5000"
ENV VIPS_CONCURRENCY=1
ENV VIPS_DISC_THRESHOLD=1g
ENV G_MESSAGES_DEBUG=
ENV FLUXER_MEDIA_PROXY_HOST=0.0.0.0
ENV FLUXER_MEDIA_PROXY_PORT=8080
ENV BUILD_VERSION="${BUILD_VERSION}"
USER 10001:10001
WORKDIR /var/lib/fluxer
EXPOSE 8080
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
CMD ["/usr/local/bin/fluxer-media-proxy", "healthcheck"]
ENTRYPOINT ["/usr/bin/tini", "--"]
CMD ["/usr/local/bin/fluxer-media-proxy"]