# Stage 1: Build the Rust binary
FROM rust:1.83-slim-bookworm AS builder
RUN apt-get update && apt-get install -y pkg-config libssl-dev && rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY Cargo.toml Cargo.lock ./
COPY src/ src/
RUN cargo build --release
# Stage 2: Build the database
FROM python:3.12-slim-bookworm AS db-builder
WORKDIR /app
COPY pipeline/ pipeline/
RUN pip install --no-cache-dir requests tqdm
# Build with ClinVar only for now (add more sources later).
# Full build takes hours and downloads ~25 GB. Run separately for production.
RUN mkdir -p data/raw && \
python pipeline/build_db.py --output data/variants.db --sources clinvar
# Stage 3: Runtime
FROM debian:bookworm-slim
RUN apt-get update && apt-get install -y ca-certificates && rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY --from=builder /app/target/release/genome /usr/local/bin/genome
COPY --from=db-builder /app/data/variants.db /app/data/variants.db
EXPOSE 3042
HEALTHCHECK --interval=30s --timeout=3s --start-period=10s --retries=3 \
CMD curl -f http://localhost:3042/health || exit 1
CMD ["genome", "serve", "--db", "/app/data/variants.db", "--host", "0.0.0.0", "--port", "3042"]