-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDockerfile
More file actions
52 lines (36 loc) · 1.47 KB
/
Dockerfile
File metadata and controls
52 lines (36 loc) · 1.47 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
# --------------- Build stage ---------------
FROM node:20-alpine AS builder
ENV PNPM_HOME="/pnpm"
ENV PATH="$PNPM_HOME:$PATH"
RUN corepack enable
WORKDIR /app
# 拷贝 workspace 配置与 lockfile
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
# 拷贝各包源码
COPY packages/server ./packages/server
COPY packages/shared ./packages/shared
# 安装全量依赖(含 devDependencies,用于编译)
RUN pnpm install --frozen-lockfile
# 先构建 shared(server 的类型依赖)
RUN pnpm --filter @kinkeeper/shared build
# 再构建 server
RUN pnpm --filter @kinkeeper/server build
# --------------- Production stage ---------------
FROM node:20-alpine AS runner
WORKDIR /app
ENV PNPM_HOME="/pnpm"
ENV PATH="$PNPM_HOME:$PATH"
RUN corepack enable
# workspace 元信息(pnpm install --prod 需要)
COPY --from=builder /app/package.json /app/pnpm-lock.yaml /app/pnpm-workspace.yaml ./
COPY --from=builder /app/packages/server/package.json ./packages/server/package.json
COPY --from=builder /app/packages/shared/package.json ./packages/shared/package.json
# 只拷贝构建产物,不带源码
COPY --from=builder /app/packages/server/dist ./packages/server/dist
COPY --from=builder /app/packages/shared/dist ./packages/shared/dist
# 仅安装生产依赖,忽略脚本(避免 husky 等 devDependencies 缺失问题)
RUN pnpm install --prod --frozen-lockfile --ignore-scripts
EXPOSE 80
ENV NODE_ENV=production
ENV PORT=80
CMD ["node", "packages/server/dist/index.js"]