# syntax=docker/dockerfile:1.7 FROM rust:1.92-trixie AS builder WORKDIR /app RUN apt-get update && apt-get install -y --no-install-recommends \ cmake \ libdav1d-dev \ nasm \ pkg-config \ && rm -rf /var/lib/apt/lists/* COPY Cargo.toml Cargo.lock ./ COPY src ./src COPY migrations ./migrations COPY templates ./templates RUN --mount=type=cache,target=/usr/local/cargo/registry,sharing=locked \ --mount=type=cache,target=/app/target,sharing=locked \ cargo build --release --locked \ && cp /app/target/release/imageforge /app/imageforge FROM node:22-alpine AS frontend-builder WORKDIR /app/frontend COPY frontend/package*.json ./ RUN --mount=type=cache,target=/root/.npm,sharing=locked npm ci COPY frontend ./ RUN npm run build FROM debian:trixie-slim RUN apt-get update && apt-get install -y --no-install-recommends \ ca-certificates \ curl \ libdav1d7 \ && rm -rf /var/lib/apt/lists/* RUN groupadd --system --gid 10001 imageforge \ && useradd --system --uid 10001 --gid imageforge --home-dir /app --shell /usr/sbin/nologin imageforge WORKDIR /app COPY --from=builder /app/imageforge ./imageforge COPY --from=frontend-builder /app/frontend/dist ./static COPY migrations ./migrations RUN mkdir -p uploads \ && chown imageforge:imageforge uploads ENV HOST=0.0.0.0 ENV PORT=8080 EXPOSE 8080 USER 10001:10001 CMD ["./imageforge"]