# syntax=docker/dockerfile:1 FROM rust:1-bookworm AS builder RUN apt-get update && apt-get install -y --no-install-recommends \ pkg-config \ libssl-dev \ cmake \ perl \ git \ curl \ ca-certificates \ unzip \ && rm -rf /var/lib/apt/lists/* RUN curl -fsSL https://bun.sh/install | bash ENV BUN_INSTALL=/root/.bun ENV PATH=$BUN_INSTALL/bin:$PATH WORKDIR /build COPY Cargo.toml Cargo.lock ./ COPY lib ./lib COPY app ./app COPY web ./web COPY admin ./admin RUN --mount=type=cache,target=/usr/local/cargo/registry \ --mount=type=cache,target=/usr/local/cargo/git \ --mount=type=cache,target=/build/target \ cargo build --release --workspace --bins && \ mkdir -p /out && \ for b in apihost githost synchost mails migrate openapi im adminhost; do \ cp "target/release/$b" /out/; \ done ########## runtime ########## FROM debian:bookworm-slim # git: githost/synchost spawn system git; openssh-client: ssh-keygen for host key RUN apt-get update && apt-get install -y --no-install-recommends \ git \ ca-certificates \ libssl3 \ openssh-client \ && rm -rf /var/lib/apt/lists/* \ && useradd --system --create-home --uid 10001 gitdata \ && mkdir -p /opt/gitdata/repos /opt/gitdata/objects \ && chown -R gitdata:gitdata /opt/gitdata WORKDIR /app COPY --chown=gitdata:gitdata config/default.toml config/default.toml COPY --from=builder /out/apihost /out/githost /out/synchost /out/mails /out/migrate /out/openapi /out/im /out/adminhost /usr/local/bin/ USER gitdata EXPOSE 3000 9418 22 3001 3002 3003 3004 CMD ["apihost"]