66 lines
3.4 KiB
Docker
66 lines
3.4 KiB
Docker
# syntax=docker/dockerfile:1
|
|||
|
|
|
||
|
|
# 分阶段构建存储和四个程序,运行镜像不包含编译器。
|
||
|
|
ARG DEBIAN_MIRROR=http://mirrors.tencentyun.com
|
||
|
|
ARG BASE_REGISTRY=docker.io
|
||
|
|
|
||
|
|
FROM ${BASE_REGISTRY}/library/rust:1-bookworm@sha256:e12566d5abc17a0da741628782cdb504b68b8961f5bfcf677936bf3e8b32de29 AS storage
|
||
|
|
ARG CARGO_REGISTRY=sparse+https://rsproxy.cn/index/
|
||
|
|
ENV CARGO_BUILD_JOBS=1 CARGO_HTTP_TIMEOUT=30
|
||
|
|
WORKDIR /build/chusql-core/storage
|
||
|
|
COPY chusql-core/storage/Cargo.toml chusql-core/storage/Cargo.lock ./
|
||
|
|
COPY chusql-core/storage/src ./src
|
||
|
|
RUN --mount=type=cache,target=/usr/local/cargo/registry \
|
||
|
|
cargo --config 'source.crates-io.replace-with="build-mirror"' \
|
||
|
|
--config "source.build-mirror.registry=\"${CARGO_REGISTRY}\"" \
|
||
|
|
build --release --locked --jobs 1
|
||
|
|
|
||
|
|
FROM ${BASE_REGISTRY}/library/haskell:9.10.3-slim-bookworm@sha256:4f1f62fec9cea4cbb03e885c9ad45642609cadd3897b1e64a7f61d0862b575b1 AS haskell
|
||
|
|
ARG DEBIAN_MIRROR
|
||
|
|
RUN sed -i "s|http://deb.debian.org|${DEBIAN_MIRROR}|g" /etc/apt/sources.list.d/debian.sources \
|
||
|
|
&& apt-get -o Acquire::Retries=2 -o Acquire::http::Timeout=30 update \
|
||
|
|
&& apt-get -o Acquire::Retries=2 -o Acquire::http::Timeout=30 install -y --no-install-recommends libgmp-dev zlib1g-dev \
|
||
|
|
&& rm -rf /var/lib/apt/lists/*
|
||
|
|
ENV LD_LIBRARY_PATH=/build/chusql-core/storage/target/release \
|
||
|
|
GHCRTS=-M1536m
|
||
|
|
WORKDIR /build
|
||
|
|
COPY --from=storage /build/chusql-core/storage/target/release/libchusql_core_storage.so ./chusql-core/storage/target/release/
|
||
|
|
COPY chusql-core/model ./chusql-core/model
|
||
|
|
COPY chusql-core/engine ./chusql-core/engine
|
||
|
|
COPY chusql-interface ./chusql-interface
|
||
|
|
COPY chusql-bootstrap ./chusql-bootstrap
|
||
|
|
COPY chusql-server ./chusql-server
|
||
|
|
COPY chusql-web ./chusql-web
|
||
|
|
COPY chusql-cli ./chusql-cli
|
||
|
|
RUN --mount=type=cache,target=/root/.stack \
|
||
|
|
stack --stack-yaml chusql-cli/stack.yaml --system-ghc --no-install-ghc \
|
||
|
|
build --fast --jobs 1 --ghc-options=-j1 --copy-bins --local-bin-path /out/bin \
|
||
|
|
chusql-server:exe:chusql-server chusql-bootstrap:exe:csql-bootstrap \
|
||
|
|
chusql-web:exe:chusql-web chusql-cli:exe:csql
|
||
|
|
|
||
|
|
FROM ${BASE_REGISTRY}/library/debian:bookworm-slim@sha256:7c7b2c966bc9ee8cedfeef67e0e279108992c77681fa595db4a9d65c06ccc587 AS runtime
|
||
|
|
ARG DEBIAN_MIRROR
|
||
|
|
RUN sed -i "s|http://deb.debian.org|${DEBIAN_MIRROR}|g" /etc/apt/sources.list.d/debian.sources \
|
||
|
|
&& apt-get -o Acquire::Retries=2 -o Acquire::http::Timeout=30 update \
|
||
|
|
&& apt-get -o Acquire::Retries=2 -o Acquire::http::Timeout=30 install -y --no-install-recommends \
|
||
|
|
ca-certificates libgmp10 libnuma1 libffi8 libtinfo6 zlib1g curl netcat-openbsd \
|
||
|
|
&& rm -rf /var/lib/apt/lists/* \
|
||
|
|
&& groupadd --gid 10001 chusql \
|
||
|
|
&& useradd --uid 10001 --gid chusql --create-home chusql \
|
||
|
|
&& install -d -o chusql -g chusql /var/lib/chusql /var/log/chusql /opt/chusql/resources
|
||
|
|
WORKDIR /opt/chusql
|
||
|
|
COPY --from=haskell /out/bin/ ./bin/
|
||
|
|
COPY --from=storage /build/chusql-core/storage/target/release/libchusql_core_storage.so ./bin/
|
||
|
|
COPY chusql-web/static ./static
|
||
|
|
COPY docker/server.toml docker/web.toml /etc/chusql/
|
||
|
|
COPY --chmod=755 docker/entrypoint.sh docker/healthcheck.sh /usr/local/bin/
|
||
|
|
ENV PATH=/opt/chusql/bin:${PATH} \
|
||
|
|
LD_LIBRARY_PATH=/opt/chusql/bin \
|
||
|
|
LANG=C.UTF-8 \
|
||
|
|
CHUSQL_ADMIN_USER=root
|
||
|
|
USER 10001:10001
|
||
|
|
EXPOSE 7777 7778
|
||
|
|
HEALTHCHECK --interval=15s --timeout=5s --start-period=30s --retries=5 \
|
||
|
|
CMD ["healthcheck.sh", "server"]
|
||
|
|
ENTRYPOINT ["entrypoint.sh"]
|
||
|
|
CMD ["server"]
|