新增版本控制
This commit is contained in:
72
Dockerfile
Normal file
72
Dockerfile
Normal file
@@ -0,0 +1,72 @@
|
||||
# ============================================================
|
||||
# Stage 1: 依赖安装 + 构建
|
||||
# ============================================================
|
||||
FROM node:20-alpine AS builder
|
||||
|
||||
RUN corepack enable && corepack prepare pnpm@9.15.4 --activate
|
||||
|
||||
WORKDIR /monorepo
|
||||
|
||||
# 先复制 workspace 配置文件(利用 Docker 层缓存)
|
||||
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml .npmrc ./
|
||||
COPY turbo.json* ./
|
||||
|
||||
# 复制所有 package.json(供 pnpm 解析 workspace 依赖)
|
||||
COPY packages/components/package.json packages/components/
|
||||
COPY packages/data/package.json packages/data/
|
||||
COPY packages/graphql/package.json packages/graphql/
|
||||
COPY packages/i18n/package.json packages/i18n/
|
||||
COPY packages/lib/package.json packages/lib/
|
||||
COPY packages/store/package.json packages/store/
|
||||
COPY packages/styles/package.json packages/styles/
|
||||
COPY packages/types/package.json packages/types/
|
||||
COPY apps/shopify-europe/package.json apps/shopify-europe/
|
||||
|
||||
# 安装全部依赖(BuildKit 缓存加速 + secret 注入 .npmrc,token 不写入镜像层)
|
||||
RUN --mount=type=cache,id=pnpm-store,target=/root/.local/share/pnpm/store \
|
||||
--mount=type=secret,id=npmrc,target=/root/.npmrc \
|
||||
pnpm install --frozen-lockfile
|
||||
|
||||
# 复制源代码
|
||||
COPY packages/ packages/
|
||||
COPY apps/shopify-europe/ apps/shopify-europe/
|
||||
|
||||
# 构建阶段设置生产模式,React Router 会跳过 dev 分支做优化
|
||||
ENV NODE_ENV=production
|
||||
|
||||
# 1. 构建所有 @repo/* 共享包
|
||||
RUN pnpm --filter '@repo/*' build
|
||||
|
||||
# 2. 构建 React Router 应用(client + server bundle)
|
||||
RUN NODE_OPTIONS="--max-old-space-size=8192" \
|
||||
pnpm --filter shopify-europe exec react-router build
|
||||
|
||||
# 3. 使用 pnpm deploy 创建自包含的生产部署目录(解析 workspace 依赖)
|
||||
RUN pnpm deploy --filter=shopify-europe --prod /deploy
|
||||
|
||||
# ============================================================
|
||||
# Stage 2: 生产镜像(最小化)
|
||||
# ============================================================
|
||||
FROM node:20-alpine AS runner
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
ENV NODE_ENV=production
|
||||
|
||||
# 非 root 用户(在 COPY 之前创建,利用层缓存)
|
||||
RUN addgroup --system --gid 1001 nodejs && \
|
||||
adduser --system --uid 1001 hydrogen
|
||||
|
||||
# 直接在 COPY 时设置归属,避免额外的 chown 层
|
||||
COPY --from=builder --chown=hydrogen:nodejs /deploy .
|
||||
COPY --from=builder --chown=hydrogen:nodejs /monorepo/apps/shopify-europe/build ./build
|
||||
COPY --from=builder --chown=hydrogen:nodejs /monorepo/apps/shopify-europe/server.js ./server.js
|
||||
|
||||
USER hydrogen
|
||||
|
||||
EXPOSE 3005
|
||||
|
||||
# HEALTHCHECK --interval=30s --timeout=5s --start-period=15s --retries=3 \
|
||||
# CMD wget -qO- http://localhost:3005/ | head -c 1 || exit 1
|
||||
|
||||
CMD ["node", "server.js"]
|
||||
Reference in New Issue
Block a user