Files
dht/Dockerfile
T

87 lines
2.4 KiB
Docker

# 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/collector \
/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 8081/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"]