57 lines
1.2 KiB
Plaintext
57 lines
1.2 KiB
Plaintext
# 第一阶段:构建阶段
|
||
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"] |