Skip to content
Clone

feat(docker): add Dockerfile for multi-stage build and .dockerignore for exclusions

ZhenYi committed
parent 18c2abc commit ac247d4 Browse files

2 files changed

+67 −0

File tree 2
Added .dockerignore View .dockerignore
@@ -0,0 +1,12 @@
1target
2.git
3.idea
4.zcode
5.env
6.env.*
7config/local.toml
8docs
9openapi.json
10*.iml
11Dockerfile
12.dockerignore
Added Dockerfile View Dockerfile
@@ -0,0 +1,55 @@
1# syntax=docker/dockerfile:1
2FROM rust:1-bookworm AS builder
3
4RUN apt-get update && apt-get install -y --no-install-recommends \
5 pkg-config \
6 libssl-dev \
7 cmake \
8 perl \
9 git \
10 curl \
11 ca-certificates \
12 unzip \
13 && rm -rf /var/lib/apt/lists/*
14
15RUN curl -fsSL https://bun.sh/install | bash
16ENV BUN_INSTALL=/root/.bun
17ENV PATH=$BUN_INSTALL/bin:$PATH
18
19WORKDIR /build
20
21COPY Cargo.toml Cargo.lock ./
22COPY lib ./lib
23COPY app ./app
24
25RUN --mount=type=cache,target=/usr/local/cargo/registry \
26 --mount=type=cache,target=/usr/local/cargo/git \
27 --mount=type=cache,target=/build/target \
28 cargo build --release --workspace --bins && \
29 mkdir -p /out && \
30 for b in apihost githost synchost mails migrate openapi; do \
31 cp "target/release/$b" /out/; \
32 done
33
34########## runtime ##########
35FROM debian:bookworm-slim
36
37RUN apt-get update && apt-get install -y --no-install-recommends \
38 git \
39 ca-certificates \
40 libssl3 \
41 && rm -rf /var/lib/apt/lists/* \
42 && useradd --system --create-home --uid 10001 gitdata \
43 && mkdir -p /opt/gitdata/repos /opt/gitdata/objects \
44 && chown -R gitdata:gitdata /opt/gitdata
45
46WORKDIR /app
47
48COPY --chown=gitdata:gitdata config/default.toml config/default.toml
49COPY --from=builder /out/apihost /out/githost /out/synchost /out/mails /out/migrate /out/openapi /usr/local/bin/
50
51USER gitdata
52
53EXPOSE 3000 9418 22
54
55CMD ["apihost"]