FROM --platform=$BUILDPLATFORM rust:1.77-slim as builder WORKDIR /usr/src/sqlpage ARG TARGETARCH ARG BUILDARCH RUN apt-get update && \ if [ "$TARGETARCH" = "$BUILDARCH" ]; then \ rustup target list --installed > TARGET && \ apt-get install -y gcc libgcc-s1 && \ cp /lib/*/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 .; \ 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 .; \ else \ echo "Unsupported cross compilation target: $TARGETARCH"; \ exit 1; \ fi && \ rustup target add $(cat TARGET) && \ cargo init . COPY Cargo.toml Cargo.lock ./ COPY .cargo ./.cargo RUN cargo build --target $(cat TARGET) --profile superoptimized COPY . . RUN touch src/main.rs && \ cargo build --target $(cat TARGET) --profile superoptimized && \ mv target/$(cat TARGET)/superoptimized/sqlpage sqlpage.bin FROM busybox:glibc RUN addgroup --gid 1000 --system sqlpage && \ adduser --uid 1000 --system --no-create-home --ingroup sqlpage sqlpage && \ mkdir -p /etc/sqlpage && \ touch /etc/sqlpage/sqlpage.db && \ chown -R sqlpage:sqlpage /etc/sqlpage/sqlpage.db ENV SQLPAGE_WEB_ROOT=/var/www ENV SQLPAGE_CONFIGURATION_DIRECTORY=/etc/sqlpage WORKDIR /var/www 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 USER sqlpage COPY --from=builder --chown=sqlpage:sqlpage /usr/src/sqlpage/sqlpage/sqlpage.db sqlpage/sqlpage.db EXPOSE 8080 CMD ["/usr/local/bin/sqlpage"]