39 lines
1.7 KiB
Docker
39 lines
1.7 KiB
Docker
# Multi-stage build for the video-editing service.
|
|
#
|
|
# The image contains the application + ffmpeg only. The local AI models (Piper, MusicGen, AudioLDM2,
|
|
# moondream2) and their Python runtime are large and non-commercially licensed, so they are NOT baked in:
|
|
# mount them read-only at runtime (e.g. -v $PWD/models:/app/models -v $PWD/.venv-local-asset:/app/.venv-local-asset)
|
|
# and point the localpoc config at them. The REST clipping and folder workflows need no models.
|
|
#
|
|
# NOTE: this is a starting deployment artifact, not a certified production image — no-egress operation,
|
|
# non-root hardening beyond the below, and vulnerability scanning are still to be validated.
|
|
|
|
# --- build ---------------------------------------------------------------------------------------------
|
|
FROM maven:3.9-eclipse-temurin-21 AS build
|
|
WORKDIR /build
|
|
# Cache dependencies first for faster rebuilds.
|
|
COPY pom.xml .
|
|
RUN mvn -B -ntp -q dependency:go-offline
|
|
COPY src ./src
|
|
# Tests run in CI (they need ffmpeg); skip them here to keep the image build fast and hermetic.
|
|
RUN mvn -B -ntp -q -DskipTests package \
|
|
&& cp target/video-editing-*.jar /build/app.jar
|
|
|
|
# --- runtime -------------------------------------------------------------------------------------------
|
|
FROM eclipse-temurin:21-jre
|
|
# ffmpeg/ffprobe are required by the media pipeline.
|
|
RUN apt-get update \
|
|
&& apt-get install -y --no-install-recommends ffmpeg \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Run as a non-root user.
|
|
RUN useradd --system --create-home --uid 10001 appuser
|
|
WORKDIR /app
|
|
COPY --from=build /build/app.jar /app/app.jar
|
|
USER appuser
|
|
|
|
EXPOSE 8080
|
|
# Bind to loopback by default; override SERVER_ADDRESS for a real deployment behind a proxy.
|
|
ENV SERVER_ADDRESS=0.0.0.0
|
|
ENTRYPOINT ["java", "-jar", "/app/app.jar"]
|