# Build stage FROM rust:latest AS builder # Install build dependencies for nokhwa (v4l2) and bindgen (clang) RUN apt-get update && apt-get install -y \ libv4l-dev \ libudev-dev \ pkg-config \ clang \ libclang-dev \ && rm -rf /var/lib/apt/lists/* WORKDIR /app # Copy manifests first for better caching COPY Cargo.toml Cargo.lock ./ # Create dummy src to cache dependencies RUN mkdir src && echo "fn main() {}" > src/main.rs RUN cargo build --release && rm -rf src target/release/deps/camera_trng* # Copy actual source and build COPY src ./src RUN cargo build --release # Runtime stage - minimal image FROM debian:bookworm-slim # Install runtime dependencies for v4l2 camera access RUN apt-get update && apt-get install -y \ libv4l-0 \ && rm -rf /var/lib/apt/lists/* # Create non-root user RUN useradd -m -u 1000 trng WORKDIR /app # Copy binary from builder COPY --from=builder /app/target/release/camera-trng . # Set ownership RUN chown -R trng:trng /app USER trng ENV PORT=8787 EXPOSE 8787 CMD ["./camera-trng"]