Build server for multiple arch #106

Merged
schmelczer merged 10 commits from asch/multi-arch into main 2025-08-30 21:50:34 +01:00
Showing only changes of commit 425a3190fb - Show all commits

Fix cross-platform docker

Andras Schmelczer 2025-08-30 11:47:22 +01:00
No known key found for this signature in database
GPG key ID: FC8F2C3D3D1A718C

View file

@ -1,42 +1,28 @@
FROM rust:1.89-slim-trixie AS builder FROM rust:1.89-slim-trixie AS builder
ARG TARGETPLATFORM
WORKDIR /usr/src/backend WORKDIR /usr/src/backend
# Set RUST_TARGET based on platform and create sourceable script RUN apt update && \
RUN case "$TARGETPLATFORM" in \ apt install -y libssl-dev pkg-config && \
"linux/amd64") echo 'export RUST_TARGET="x86_64-unknown-linux-musl"' > /tmp/rust_env ;; \
"linux/arm64") echo 'export RUST_TARGET="aarch64-unknown-linux-musl"' > /tmp/rust_env ;; \
"linux/arm/v7") echo 'export RUST_TARGET="armv7-unknown-linux-musleabihf"' > /tmp/rust_env ;; \
*) echo "Unsupported platform: $TARGETPLATFORM" && exit 1 ;; \
esac
# Install musl tools, cross-compilation toolchains, and OpenSSL dev packages
RUN . /tmp/rust_env && \
apt update && \
apt install -y musl-tools libssl-dev pkg-config \
gcc-aarch64-linux-gnu \
gcc-arm-linux-gnueabi &&\
rustup target add $RUST_TARGET && \
cargo install sqlx-cli cargo install sqlx-cli
# Build application # Build application
COPY . . COPY . .
RUN . /tmp/rust_env && \ RUN sqlx database create --database-url sqlite://db.sqlite3 && \
export CFLAGS="-Wno-stringop-overread" && \
sqlx database create --database-url sqlite://db.sqlite3 && \
sqlx migrate run --source src/app_state/database/migrations --database-url sqlite://db.sqlite3 && \ sqlx migrate run --source src/app_state/database/migrations --database-url sqlite://db.sqlite3 && \
cargo build --release --target $RUST_TARGET cargo build --release
# Runtime image FROM debian:trixie-slim
FROM alpine:3.22.1
LABEL org.opencontainers.image.authors="andras@schmelczer.dev" LABEL org.opencontainers.image.authors="andras@schmelczer.dev"
RUN apk add --no-cache curl ca-certificates RUN apt update && \
apt install -y curl ca-certificates && \
apt clean && \
rm -rf /var/lib/apt/lists/*
COPY --from=builder /usr/src/backend/target/*/release/sync_server /app/sync_server COPY --from=builder /usr/src/backend/target/release/sync_server /app/sync_server
VOLUME /data VOLUME /data
EXPOSE 3000/tcp EXPOSE 3000/tcp