diff --git a/.cargo/config b/.cargo/config new file mode 100644 index 00000000..cf929537 --- /dev/null +++ b/.cargo/config @@ -0,0 +1,5 @@ +[target.armv7-unknown-linux-gnueabihf] +linker = "gcc-arm-linux-gnueabihf" + +[target.aarch64-unknown-linux-gnu] +linker = "aarch64-linux-gnu-gcc" \ No newline at end of file diff --git a/.dockerignore b/.dockerignore index a36bef71..be375585 100644 --- a/.dockerignore +++ b/.dockerignore @@ -10,3 +10,5 @@ configuration.md .github/ examples/ mssql/ +tests/ +.idea/ \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 334895c0..fcca2213 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,19 +1,40 @@ -FROM rust:1.72-alpine3.17 as builder -RUN apk add --no-cache musl-dev +FROM --platform=$BUILDPLATFORM rust:1.72-slim as builder WORKDIR /usr/src/sqlpage -RUN cargo init . +ARG TARGETARCH +RUN apt-get update && apt-get install -y musl-tools && \ + if [ "$TARGETARCH" = "amd64" ]; then \ + echo x86_64-unknown-linux-gnu > TARGET; \ + apt-get install -y gcc libgcc-s1; \ + cp /lib/x86_64-linux-gnu/libgcc_s.so.1 libgcc_s.so.1; \ + elif [ "$TARGETARCH" = "arm64" ]; then \ + echo aarch64-unknown-linux-gnu > TARGET; \ + apt-get install -y gcc-aarch64-linux-gnu libgcc-s1-arm64-cross; \ + cp /usr/aarch64-linux-gnu/lib/libgcc_s.so.1 libgcc_s.so.1; \ + elif [ "$TARGETARCH" = "arm" ]; then \ + echo armv7-unknown-linux-gnueabihf > TARGET; \ + apt-get install -y gcc-arm-linux-gnueabihf libgcc-s1-armhf-cross; \ + cp /usr/arm-linux-gnueabihf/lib/libgcc_s.so.1 libgcc_s.so.1; \ + else \ + echo "Unknown platform: $TARGETPLATFORM"; \ + exit 1; \ + fi && \ + rustup target add $(cat TARGET) && \ + cargo init . COPY Cargo.toml Cargo.lock ./ -RUN cargo build --profile superoptimized +COPY .cargo ./.cargo +RUN cargo build --target $(cat TARGET) --profile superoptimized COPY . . RUN touch src/main.rs && \ - cargo build --profile superoptimized + cargo build --target $(cat TARGET) --profile superoptimized +RUN mv target/$(cat TARGET)/superoptimized/sqlpage sqlpage.bin && \ + strip sqlpage.bin -FROM alpine:3.17 -RUN rm -rf /var/lib/apt/lists/* && \ - addgroup -S sqlpage && adduser -S sqlpage -G sqlpage -COPY --from=builder /usr/src/sqlpage/target/superoptimized/sqlpage /usr/local/bin/sqlpage +FROM busybox:glibc +RUN addgroup --system sqlpage && \ + adduser --system --no-create-home --ingroup sqlpage sqlpage +COPY --from=builder /usr/src/sqlpage/sqlpage.bin /usr/local/bin/sqlpage +COPY --from=builder /usr/src/sqlpage/libgcc_s.so.1 /lib/libgcc_s.so.1 WORKDIR /var/www -COPY --from=builder /usr/src/sqlpage/index.sql . USER sqlpage EXPOSE 8080 -CMD ["sqlpage"] \ No newline at end of file +CMD ["/usr/local/bin/sqlpage"] \ No newline at end of file