# syntax=docker/dockerfile:1 FROM oven/bun:1.3.14-debian AS web-builder WORKDIR /build/src/web COPY src/web/package.json src/web/bun.lock ./ RUN bun install --frozen-lockfile COPY src/web/ ./ RUN bun run build FROM rust:1.97.1-trixie AS rust-builder RUN apt-get update \ && apt-get install -y --no-install-recommends \ clang \ cmake \ libclang-dev \ pkg-config \ && rm -rf /var/lib/apt/lists/* WORKDIR /build COPY Cargo.toml Cargo.lock ./ COPY src/crawler ./src/crawler COPY src/search ./src/search RUN --mount=type=cache,id=dht-cargo-registry,target=/usr/local/cargo/registry,sharing=locked \ --mount=type=cache,id=dht-cargo-git,target=/usr/local/cargo/git,sharing=locked \ --mount=type=cache,id=dht-cargo-target,target=/build/target,sharing=locked \ cargo build --locked --release -p dht-search --bin dht-search \ && install -Dm755 target/release/dht-search /out/dht-search FROM rust-builder AS index-tools-builder RUN --mount=type=cache,id=dht-cargo-registry,target=/usr/local/cargo/registry,sharing=locked \ --mount=type=cache,id=dht-cargo-git,target=/usr/local/cargo/git,sharing=locked \ --mount=type=cache,id=dht-cargo-target,target=/build/target,sharing=locked \ cargo build --locked --release -p dht-search --bin dht-index-inspect \ && install -Dm755 target/release/dht-index-inspect /out/dht-index-inspect FROM scratch AS index-tools COPY --from=index-tools-builder /out/dht-index-inspect /dht-index-inspect FROM debian:trixie-slim AS runtime RUN apt-get update \ && apt-get install -y --no-install-recommends \ libgcc-s1 \ libstdc++6 \ && rm -rf /var/lib/apt/lists/* RUN groupadd --gid 10001 dht-search \ && useradd \ --uid 10001 \ --gid 10001 \ --no-create-home \ --no-log-init \ --shell /usr/sbin/nologin \ dht-search \ && install -d -o 10001 -g 10001 \ /dht-search \ /dht-search/data \ /dht-search/web COPY --from=rust-builder /out/dht-search /dht-search/dht-search COPY --from=web-builder /build/src/web/dist /dht-search/web COPY --chmod=0644 --chown=10001:10001 config.toml /dht-search/config.toml USER 10001:10001 EXPOSE 8080/tcp EXPOSE 12313/udp STOPSIGNAL SIGTERM ENTRYPOINT ["/dht-search/dht-search"] CMD ["--config", "/dht-search/config.toml", "--http-listen", "0.0.0.0:8080", "--web-dir", "/dht-search/web"]