# Stage 1: Build the Rust binary
FROM rust:1.85-slim as builder
# Install build dependencies
RUN apt-get update && apt-get install -y \
pkg-config \
libssl-dev \
&& rm -rf /var/lib/apt/lists/*
# Create app directory
WORKDIR /app
# Copy workspace files
COPY Cargo.toml Cargo.lock ./
COPY crates ./crates
# Build the release binary
RUN cargo build --release --bin meritocrab-server
# Stage 2: Create minimal runtime image
FROM debian:bookworm-slim
# Install runtime dependencies
RUN apt-get update && apt-get install -y \
ca-certificates \
libssl3 \
&& rm -rf /var/lib/apt/lists/*
# Create app user
RUN useradd -m -u 1000 appuser
# Create app directory
WORKDIR /app
# Copy binary from builder
COPY --from=builder /app/target/release/meritocrab-server /app/meritocrab-server
# Copy migrations
COPY --from=builder /app/crates/meritocrab-db/migrations /app/migrations
# Set ownership
RUN chown -R appuser:appuser /app
# Switch to app user
USER appuser
# Expose port
EXPOSE 3000
# Run the server
CMD ["/app/meritocrab-server"]