FROM messense/rust-musl-cross:x86_64-musl AS stub-amd64 WORKDIR /build COPY Cargo.toml Cargo.lock* ./ COPY crates ./crates RUN --mount=type=cache,target=/root/.cargo/registry \ --mount=type=cache,target=/build/target \ cargo build --release --target x86_64-unknown-linux-musl -p rsh && \ cp target/x86_64-unknown-linux-musl/release/rsh /rsh-x86_64 FROM messense/rust-musl-cross:aarch64-musl AS stub-arm64 WORKDIR /build COPY Cargo.toml Cargo.lock* ./ COPY crates ./crates RUN --mount=type=cache,target=/root/.cargo/registry \ --mount=type=cache,target=/build/target \ cargo build --release --target aarch64-unknown-linux-musl -p rsh && \ cp target/aarch64-unknown-linux-musl/release/rsh /rsh-aarch64 FROM rust:1.95.0-trixie AS chef RUN cargo install cargo-chef --locked WORKDIR /build FROM chef AS planner COPY Cargo.toml Cargo.lock* ./ COPY crates ./crates RUN cargo chef prepare --recipe-path recipe.json FROM chef AS builder COPY --from=stub-amd64 /rsh-x86_64 /stubs/rsh-x86_64 COPY --from=stub-arm64 /rsh-aarch64 /stubs/rsh-aarch64 COPY --from=planner /build/recipe.json recipe.json ENV RSH_STUB_X86_64=/stubs/rsh-x86_64 \ RSH_STUB_AARCH64=/stubs/rsh-aarch64 RUN --mount=type=cache,target=/usr/local/cargo/registry \ cargo chef cook --release -p rsh-backend --recipe-path recipe.json COPY Cargo.toml Cargo.lock* ./ COPY crates ./crates RUN --mount=type=cache,target=/usr/local/cargo/registry \ --mount=type=cache,target=/build/target \ cargo build --release -p rsh-backend && \ cp target/release/rsh-backend /usr/local/bin/rsh-backend FROM debian:bookworm-slim AS runtime RUN apt-get update && \ apt-get install -y --no-install-recommends ca-certificates tini && \ rm -rf /var/lib/apt/lists/* && \ useradd --system --uid 10001 --home /var/lib/rsh --create-home rsh COPY --from=builder /usr/local/bin/rsh-backend /usr/local/bin/rsh-backend ENV RSH_DATA=/var/lib/rsh \ RSH_BIND=0.0.0.0:7777 \ RSH_LOG=info EXPOSE 7777 VOLUME ["/var/lib/rsh"] ENTRYPOINT ["/usr/bin/tini", "--", "/usr/local/bin/rsh-backend"]