full_container_scheme/2.docker/dockerfile.build-node

57 lines
1.2 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 第一阶段:构建阶段
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"]