forked from keycompute/keycompute
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDockerfile.server
More file actions
124 lines (105 loc) · 5.11 KB
/
Copy pathDockerfile.server
File metadata and controls
124 lines (105 loc) · 5.11 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# =============================================================================
# Dockerfile.server — KeyCompute 后端服务构建
# =============================================================================
# ─────────────────────────────────────────────────────────────────────────────
# 阶段 1:builder — 编译应用
# ─────────────────────────────────────────────────────────────────────────────
FROM rust:1.92.0-bookworm AS builder
# 安装构建依赖
RUN apt-get update && apt-get install -y --no-install-recommends \
pkg-config \
libpq-dev \
libssl-dev \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /app
# 先复制依赖文件以利用缓存
COPY Cargo.toml Cargo.lock ./
# 创建空的 crate 目录和 src 文件(用于缓存依赖)
RUN mkdir -p crates/keycompute-types/src \
crates/keycompute-db/src \
crates/keycompute-auth/src \
crates/keycompute-runtime/src \
crates/keycompute-ratelimit/src \
crates/keycompute-pricing/src \
crates/keycompute-routing/src \
crates/keycompute-billing/src \
crates/keycompute-distribution/src \
crates/keycompute-observability/src \
crates/keycompute-config/src \
crates/keycompute-emailserver/src \
crates/keycompute-server/src \
crates/llm-gateway/src \
crates/llm-provider/keycompute-provider-trait/src \
crates/llm-provider/keycompute-openai/src \
crates/llm-provider/keycompute-claude/src \
crates/llm-provider/keycompute-gemini/src \
crates/llm-provider/keycompute-ollama/src \
crates/llm-provider/keycompute-deepseek/src \
crates/llm-provider/keycompute-vllm/src \
crates/keycompute-payment/keycompute-alipay/src \
crates/keycompute-payment/keycompute-wechatpay/src \
crates/integration-tests/src \
packages/ui/src \
packages/web/src \
packages/client-api/src \
&& touch crates/keycompute-types/src/lib.rs \
crates/keycompute-db/src/lib.rs \
crates/keycompute-auth/src/lib.rs \
crates/keycompute-runtime/src/lib.rs \
crates/keycompute-ratelimit/src/lib.rs \
crates/keycompute-pricing/src/lib.rs \
crates/keycompute-routing/src/lib.rs \
crates/keycompute-billing/src/lib.rs \
crates/keycompute-distribution/src/lib.rs \
crates/keycompute-observability/src/lib.rs \
crates/keycompute-config/src/lib.rs \
crates/keycompute-emailserver/src/lib.rs \
crates/keycompute-server/src/lib.rs \
crates/keycompute-server/src/main.rs \
crates/llm-gateway/src/lib.rs \
crates/llm-provider/keycompute-provider-trait/src/lib.rs \
crates/llm-provider/keycompute-openai/src/lib.rs \
crates/llm-provider/keycompute-claude/src/lib.rs \
crates/llm-provider/keycompute-gemini/src/lib.rs \
crates/llm-provider/keycompute-ollama/src/lib.rs \
crates/llm-provider/keycompute-deepseek/src/lib.rs \
crates/llm-provider/keycompute-vllm/src/lib.rs \
crates/keycompute-payment/keycompute-alipay/src/lib.rs \
crates/keycompute-payment/keycompute-wechatpay/src/lib.rs \
crates/integration-tests/src/lib.rs \
packages/ui/src/lib.rs \
packages/web/src/lib.rs \
packages/client-api/src/lib.rs
# 创建虚拟 Cargo.toml 只包含服务端需要的成员(排除 desktop/mobile)
RUN sed -i 's/"packages\/desktop",//g; s/"packages\/mobile",//g' Cargo.toml
# 构建空的依赖层以缓存依赖
RUN cargo build --release -p keycompute-server --features redis 2>/dev/null || true
# 现在复制真实的源代码
COPY crates/ crates/
COPY packages/client-api packages/client-api/
COPY packages/ui packages/ui/
COPY packages/web packages/web/
# 重新构建实际应用
RUN cargo build --release -p keycompute-server --features redis
# ─────────────────────────────────────────────────────────────────────────────
# 阶段 2:runtime — 最小化运行时镜像
# ─────────────────────────────────────────────────────────────────────────────
FROM debian:bookworm-slim AS runtime
# 安装运行时依赖
RUN apt-get update && apt-get install -y --no-install-recommends \
libpq5 \
libssl3 \
ca-certificates \
curl \
&& rm -rf /var/lib/apt/lists/*
# 创建非 root 运行用户
RUN groupadd -r keycompute && useradd -r -g keycompute keycompute
WORKDIR /app
# 复制编译产物
COPY --from=builder /app/target/release/keycompute-server /usr/local/bin/keycompute-server
RUN chmod +x /usr/local/bin/keycompute-server
USER keycompute
EXPOSE 3000
HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \
CMD curl -f http://localhost:3000/health || exit 1
ENTRYPOINT ["/usr/local/bin/keycompute-server"]