63 lines
1.8 KiB
Docker
63 lines
1.8 KiB
Docker
FROM --platform=$BUILDPLATFORM rust:1-bookworm AS builder
|
|
|
|
WORKDIR /src
|
|
RUN apt-get update \
|
|
&& apt-get install --no-install-recommends -y \
|
|
build-essential ca-certificates \
|
|
gcc-aarch64-linux-gnu gcc-x86-64-linux-gnu \
|
|
libc6-dev-arm64-cross libc6-dev-amd64-cross \
|
|
linux-libc-dev-arm64-cross linux-libc-dev-amd64-cross \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
ARG TARGETARCH
|
|
COPY Cargo.toml Cargo.lock ./
|
|
COPY migrations ./migrations
|
|
COPY src ./src
|
|
COPY tests ./tests
|
|
|
|
RUN case "$TARGETARCH" in \
|
|
amd64) \
|
|
rust_target=x86_64-unknown-linux-gnu; \
|
|
linker=x86_64-linux-gnu-gcc; \
|
|
;; \
|
|
arm64) \
|
|
rust_target=aarch64-unknown-linux-gnu; \
|
|
linker=aarch64-linux-gnu-gcc; \
|
|
;; \
|
|
*) \
|
|
echo "unsupported TARGETARCH=$TARGETARCH" >&2; \
|
|
exit 1; \
|
|
;; \
|
|
esac \
|
|
&& rustup target add "$rust_target" \
|
|
&& env "CARGO_TARGET_$(printf '%s' "$rust_target" | tr '[:lower:]-' '[:upper:]_')_LINKER=$linker" \
|
|
CC="$linker" \
|
|
cargo build --release --locked --target "$rust_target" \
|
|
&& mkdir -p /out \
|
|
&& cp "target/$rust_target/release/kosync-rs" /out/kosync-rs
|
|
|
|
FROM debian:bookworm-slim
|
|
|
|
RUN apt-get update \
|
|
&& apt-get install --no-install-recommends -y ca-certificates \
|
|
&& rm -rf /var/lib/apt/lists/* \
|
|
&& useradd --system --uid 10001 --home-dir /data --create-home kosync
|
|
|
|
COPY --from=builder /out/kosync-rs /usr/local/bin/kosync-rs
|
|
|
|
USER kosync
|
|
WORKDIR /data
|
|
ENV KOSYNC_DB=/data/kosync.sqlite3
|
|
ENV KOSYNC_TLS=auto
|
|
ENV ENABLE_USER_REGISTRATION=true
|
|
ENV RUST_LOG=info
|
|
|
|
EXPOSE 7200 17200
|
|
VOLUME ["/data"]
|
|
|
|
HEALTHCHECK --interval=30s --timeout=5s --retries=3 \
|
|
CMD ["kosync-rs", "healthcheck", "--url", "https://127.0.0.1:7200/healthcheck", "--insecure"]
|
|
|
|
ENTRYPOINT ["kosync-rs"]
|
|
CMD ["serve"]
|