embystream 0.0.36

Another Emby streaming application (frontend/backend separation) written in Rust.
Documentation
# syntax=docker/dockerfile:1.7

FROM oven/bun:1.3.12 AS frontend-builder

WORKDIR /usr/src/app/web

COPY Cargo.toml /usr/src/app/Cargo.toml
COPY web/package.json web/bun.lock ./
RUN set -eux; \
    for attempt in 1 2 3; do \
        bun install --frozen-lockfile && exit 0; \
        rm -rf /root/.bun/install/cache; \
        if [ "${attempt}" -eq 3 ]; then \
            exit 1; \
        fi; \
        sleep 2; \
    done

COPY web ./
RUN bun run build

FROM rust:1.88.0-slim AS builder

WORKDIR /usr/src/app

RUN apt-get update && apt-get install -y --no-install-recommends \
    build-essential \
    cmake \
    pkg-config \
    && rm -rf /var/lib/apt/lists/*

COPY Cargo.toml Cargo.lock build.rs ./
COPY src ./src
COPY locales ./locales
COPY --from=frontend-builder /usr/src/app/web/dist ./web/dist

RUN --mount=type=cache,target=/usr/local/cargo/registry \
    --mount=type=cache,target=/usr/local/cargo/git/db \
    --mount=type=cache,target=/usr/src/app/target \
    cargo build --release && \
    cp /usr/src/app/target/release/embystream /tmp/embystream

FROM debian:bookworm-slim

RUN apt-get update && apt-get install -y --no-install-recommends \
    ca-certificates \
    && rm -rf /var/lib/apt/lists/* \
    && mkdir -p /config/embystream /data/logs /data/web-config/data /data/web-config/logs

COPY src/config/config.toml.template /config/embystream/config.toml
COPY --from=builder /tmp/embystream /usr/local/bin/embystream

EXPOSE 6888
VOLUME ["/config/embystream", "/data"]

CMD ["embystream", "run", "--config", "/config/embystream/config.toml", "--web", "--web-listen", "0.0.0.0:6888", "--web-data-dir", "/data/web-config/data", "--web-runtime-log-dir", "/data/web-config/logs"]