# 第一阶段：构建（依赖安装+项目打包）
FROM node:18-alpine AS builder
WORKDIR /app

# 复制包管理文件（优先缓存，加速后续构建）
COPY package.json pnpm-lock.yaml ./
# 安装pnpm（如果基础镜像没有）
RUN npm install -g pnpm
# 安装依赖（锁定版本，避免意外更新）
RUN pnpm install --frozen-lockfile

# 复制全部源码（除了.dockerignore排除的文件）
COPY . .
# 构建Next.js生产包（生成.next文件夹）
RUN pnpm run build

# 第二阶段：运行（仅复制必要文件，减少镜像大小）
FROM node:18-alpine AS runner
WORKDIR /app

# 设置生产环境变量
ENV NODE_ENV=production
ENV PORT=3000
EXPOSE 3000

# 复制构建阶段的产物（仅保留运行所需文件）
COPY --from=builder /app/.next /app/.next
COPY --from=builder /app/public /app/public
COPY --from=builder /app/package.json /app/package.json
COPY --from=builder /app/pnpm-lock.yaml /app/pnpm-lock.yaml

# 安装运行时依赖（不需要devDependencies）
RUN npm install -g pnpm && pnpm install --prod --frozen-lockfile

# 切换非root用户（安全最佳实践）
RUN addgroup -g 1001 -S nodejs && adduser -S nextjs -u 1001
RUN chown -R nextjs:nodejs /app/.next
USER nextjs

# 启动Next.js生产服务
CMD ["pnpm", "start"]