diff --git a/.cargo/config.toml b/.cargo/config.toml new file mode 100644 index 0000000..e319428 --- /dev/null +++ b/.cargo/config.toml @@ -0,0 +1,7 @@ +[build] +target = "x86_64-unknown-linux-gnu" +rustflags = ["-C", "target-feature=+crt-static"] + +[target.aarch64-unknown-linux-gnu] +linker = "aarch64-linux-gnu-gcc" +rustflags = ["-C", "target-feature=+crt-static"] diff --git a/Dockerfile b/Dockerfile index 242e42a..19cee2a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,12 +1,30 @@ -FROM rust:1 as builder +###### Builder Image +FROM rust as builder WORKDIR /app COPY . . -RUN RUSTFLAGS='-C target-feature=+crt-static' cargo install --target x86_64-unknown-linux-gnu --path . +# scratch does not have the mkdir binary, so we create a folder here +RUN mkdir -p empty_upload + +ARG ARCH +RUN __ARCH="$(dpkg --print-architecture)"; \ + [ -z $ARCH ] || __ARCH=$ARCH; \ + case "$__ARCH" in \ + arm64) \ + export __TARGET='aarch64-unknown-linux-gnu'; \ + apt update && apt upgrade -y; \ + apt install -y gcc-aarch64-linux-gnu; \ + rustup target add aarch64-unknown-linux-gnu; \ + ;; \ + amd64) export __TARGET='x86_64-unknown-linux-gnu' ;; \ + esac; \ + cargo install --target $__TARGET --path .; + RUN cargo clean -FROM debian:buster-slim as runner -WORKDIR /app -RUN mkdir -p upload + +###### Runner Image +FROM scratch as runner +COPY --from=builder /app/empty_upload upload COPY ./client upload/client COPY ./templates templates COPY ./static static