Use cross-compilation for CI, build the Docker image from source (#85)
This commit is contained in:
47
Dockerfile
47
Dockerfile
@@ -1,19 +1,42 @@
|
||||
FROM debian:bullseye-slim
|
||||
# Stalwart Dockerfile
|
||||
# Credits: https://github.com/33KK
|
||||
|
||||
RUN apt-get update -y && apt-get install -yq ca-certificates curl
|
||||
FROM --platform=$BUILDPLATFORM docker.io/lukemathwalker/cargo-chef:latest-rust-slim-bookworm AS chef
|
||||
WORKDIR /build
|
||||
|
||||
COPY resources/docker/entrypoint.sh /usr/local/bin/entrypoint.sh
|
||||
COPY resources/docker/download.sh /usr/local/bin/download.sh
|
||||
RUN chmod a+rx /usr/local/bin/*.sh
|
||||
RUN /usr/local/bin/download.sh
|
||||
RUN rm /usr/local/bin/download.sh
|
||||
FROM --platform=$BUILDPLATFORM chef AS planner
|
||||
COPY . .
|
||||
RUN cargo chef prepare --recipe-path /recipe.json
|
||||
|
||||
RUN useradd stalwart-mail -s /sbin/nologin -M
|
||||
RUN mkdir -p /opt/stalwart-mail
|
||||
RUN chown stalwart-mail:stalwart-mail /opt/stalwart-mail
|
||||
FROM --platform=$BUILDPLATFORM chef AS builder
|
||||
ARG TARGETPLATFORM
|
||||
RUN case "${TARGETPLATFORM}" in \
|
||||
"linux/arm64") echo "aarch64-unknown-linux-gnu" > /target.txt && echo "-C linker=aarch64-linux-gnu-gcc" > /flags.txt ;; \
|
||||
"linux/amd64") echo "x86_64-unknown-linux-gnu" > /target.txt && echo "-C linker=x86_64-linux-gnu-gcc" > /flags.txt ;; \
|
||||
*) exit 1 ;; \
|
||||
esac
|
||||
RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
apt-get update && \
|
||||
apt-get install -yq build-essential libclang-16-dev \
|
||||
g++-aarch64-linux-gnu binutils-aarch64-linux-gnu \
|
||||
g++-x86-64-linux-gnu binutils-x86-64-linux-gnu
|
||||
RUN rustup target add "$(cat /target.txt)"
|
||||
COPY --from=planner /recipe.json /recipe.json
|
||||
RUN RUSTFLAGS="$(cat /flags.txt)" cargo chef cook --target "$(cat /target.txt)" --release --recipe-path /recipe.json
|
||||
COPY . .
|
||||
RUN RUSTFLAGS="$(cat /flags.txt)" cargo build --target "$(cat /target.txt)" --release -p mail-server -p stalwart-cli
|
||||
RUN mv "/build/target/$(cat /target.txt)/release" "/output"
|
||||
|
||||
FROM docker.io/debian:bookworm-slim
|
||||
WORKDIR /opt/stalwart-mail
|
||||
RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
apt-get update && \
|
||||
apt-get install -yq ca-certificates
|
||||
COPY --from=builder /output/stalwart-mail /usr/local/bin
|
||||
COPY --from=builder /output/stalwart-cli /usr/local/bin
|
||||
COPY ./resources/docker/entrypoint.sh /usr/local/bin/entrypoint.sh
|
||||
RUN chmod -R 755 /usr/local/bin
|
||||
CMD ["/usr/local/bin/stalwart-mail"]
|
||||
VOLUME [ "/opt/stalwart-mail" ]
|
||||
|
||||
EXPOSE 443 25 587 465 143 993 4190 8080
|
||||
|
||||
ENTRYPOINT ["/bin/sh", "/usr/local/bin/entrypoint.sh"]
|
||||
|
||||
Reference in New Issue
Block a user