# 第一阶段:构建阶段 FROM node:20.6.0 AS builder # 启用 Corepack 并安装 pnpm RUN corepack enable && corepack prepare pnpm@latest --activate WORKDIR /app # 复制依赖文件 COPY package.json pnpm-lock.yaml* ./ # 创建 public/tradingview 目录(确保路径存在) RUN mkdir -p /app/public/tradingview # 复制 public 目录 COPY public /app/public # 安装项目依赖(包含开发依赖) RUN pnpm install # 复制源代码 COPY . . # 构建项目 RUN pnpm run build # 第二阶段:运行阶段 FROM node:20.6-alpine AS runtime # 安装 pnpm RUN npm install -g pnpm WORKDIR /app # 从构建阶段复制必要文件(先复制 public/tradingview) COPY --from=builder /app/public ./public # 复制依赖文件 COPY --from=builder /app/package.json . COPY --from=builder /app/pnpm-lock.yaml . # 预先下载生产依赖(此时 public/tradingview 已存在) RUN pnpm fetch --prod # 复制剩余文件 COPY --from=builder /app/server.js . COPY --from=builder /app/next.config.mjs . COPY --from=builder /app/.next ./.next # 离线安装生产依赖 RUN pnpm install --prod --offline --no-frozen-lockfile # 暴露端口 EXPOSE 3000 # 定义容器启动命令 CMD ["pnpm", "run", "start"]