55 lines
2.0 KiB
Docker
55 lines
2.0 KiB
Docker
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"]
|