build-flow.api/Dockerfile
xiangning fa03ae26d1 fix(docker): builder 阶段装 git,解决 lefthook prepare 钩子失败
node:22-alpine 无 git,pnpm install 触发 prepare(is-ci || lefthook install)
时报 'git not found in PATH'。
2026-07-17 13:43:07 +08:00

46 lines
2.1 KiB
Docker
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# BuildFlow Web (web-antdv-next / @vben/web-antdv-next) 多阶段构建
# 第一阶段:Node 22 构建 SPA 产物;第二阶段:Nginx 托管静态资源
# base 镜像走 Harbor Proxy Cache(dockerhub-proxy → docker.io),避免公网拉取超时
FROM 43.134.235.58:58080/dockerhub-proxy/library/node:22-alpine AS builder
WORKDIR /app
# 装 git:lefthook 的 prepare 钩子(is-ci || pnpm exec lefthook install)需要 git
RUN apk add --no-cache git
# 全局装 pnpm(与本地 11.x 对齐;corepack 在 alpine 上不可靠)
RUN npm install -g pnpm@11
# npm 包源走阿里 npmmirror(国内最稳,避免 registry.npmjs.org 拉取 error 23)
# 调大 fetch 超时与重试:npmmirror 带宽有限,默认超时会致 1622 包 install 中断
RUN pnpm config set registry https://registry.npmmirror.com \
&& pnpm config set fetch-timeout 600000 \
&& pnpm config set fetch-retries 5 \
&& pnpm config set fetch-retry-factor 2 \
&& pnpm config set fetch-retry-mintimeout 10000 \
&& pnpm config set fetch-retry-maxtimeout 60000
# 先拷依赖清单利用层缓存(pnpm workspace + turbo 需要这些清单文件齐备)
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml turbo.json ./
COPY internal/ ./internal/
COPY scripts/ ./scripts/
COPY apps/web-antdv-next/package.json ./apps/web-antdv-next/package.json
# 拷贝其余 packages 的 package.json(workspace 依赖解析需要),但不拷 node_modules
COPY packages/ ./packages/
RUN pnpm install --frozen-lockfile
# 拷贝全部源码
COPY . .
# 构建 web-antdv-next 变体(turbo 按 workspace 名过滤;质量门禁内含 typecheck)
RUN pnpm run build --filter=@vben/web-antdv-next...
# ---- 运行阶段:Nginx 托管静态资源 ----
FROM 43.134.235.58:58080/dockerhub-proxy/library/nginx:1.27-alpine AS runtime
COPY apps/web-antdv-next/nginx.conf /etc/nginx/conf.d/default.conf
COPY --from=builder /app/apps/web-antdv-next/dist /usr/share/nginx/html
EXPOSE 80
HEALTHCHECK --interval=30s --timeout=3s --retries=3 CMD wget -q --spider http://127.0.0.1/ || exit 1
CMD ["nginx", "-g", "daemon off;"]