40 lines
907 B
Docker
40 lines
907 B
Docker
# Stage 1: 依赖安装 + 构建
|
||
FROM node:24-alpine
|
||
|
||
WORKDIR /app
|
||
|
||
# 允许所有包的 postinstall 脚本(Prisma/esbuild 需要)
|
||
ENV NPM_CONFIG_IGNORE_SCRIPTS=false
|
||
|
||
# 复制依赖文件
|
||
COPY package.json pnpm-lock.yaml ./
|
||
COPY .npmrc ./
|
||
|
||
# 安装依赖(pnpm 会读取 .npmrc 中的 onlyBuiltDependencies)
|
||
RUN corepack enable && pnpm install --frozen-lockfile
|
||
|
||
# 复制 Prisma schema 并生成客户端
|
||
COPY prisma/ ./prisma/
|
||
RUN npx prisma generate
|
||
|
||
# 复制源码并构建
|
||
COPY . .
|
||
RUN npm run build
|
||
|
||
# Stage 2: 最小运行时镜像
|
||
FROM node:20-alpine AS runner
|
||
WORKDIR /app
|
||
|
||
ENV NODE_ENV=production
|
||
ENV NEXT_TELEMETRY_DISABLED=1
|
||
|
||
# 复制 standalone 输出和静态资源
|
||
COPY --from=builder /app/.next/standalone ./
|
||
COPY --from=builder /app/.next/static ./.next/static
|
||
COPY --from=builder /app/public ./public
|
||
COPY --from=builder /app/prisma ./prisma
|
||
|
||
EXPOSE 3000
|
||
|
||
CMD ["node", "server.js"]
|