# Multi-stage build for optimized production image FROM rust:1.83 as builder WORKDIR /app # Copy manifests for dependency caching COPY Cargo.toml Cargo.lock* ./ # Create dummy source for dependency caching RUN mkdir -p src && \ echo "fn main() {}" > src/main.rs && \ cargo build --release && \ rm -rf src # Copy the actual source code COPY src/ src/ # Force rebuild with actual source RUN touch src/main.rs && rm -f target/release/calendar-microservice && cargo build --release # Runtime stage FROM debian:bookworm-slim WORKDIR /app # Install runtime dependencies RUN apt-get update && \ apt-get install -y --no-install-recommends ca-certificates libssl3 curl && \ rm -rf /var/lib/apt/lists/* # Create non-root user RUN useradd -r -s /bin/false appuser # Copy the built binary COPY --from=builder /app/target/release/calendar-microservice /app/calendar-microservice # Set ownership RUN chown appuser:appuser /app/calendar-microservice # Switch to non-root user USER appuser # Environment defaults ENV HOST=0.0.0.0 ENV PORT=4000 ENV RUST_LOG=info EXPOSE 4000 # Health check HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \ CMD curl -f http://localhost:4000/api/v1/health || exit 1 CMD ["/app/calendar-microservice"]