# 基础镜像阶段 - 使用 Node.js 22 作为基础镜像 FROM node:22-alpine AS base # 安装依赖阶段 FROM base AS deps # 使用 Alpine 的包管理器安装必要的系统依赖 RUN apk add --no-cache libc6-compat WORKDIR /app # 复制 package.json 和 package-lock.json COPY package.json package-lock.json* ./ # 使用 npm 安装项目依赖 RUN npm install # 构建阶段 FROM base AS builder WORKDIR /app # 从依赖阶段复制 node_modules COPY --from=deps /app/node_modules ./node_modules # 复制所有项目文件 COPY . . # 构建应用 RUN npm run build # 生产运行阶段 FROM base AS runner WORKDIR /app # 设置为生产环境 ENV NODE_ENV production # 创建非 root 用户运行应用,提高安全性 RUN addgroup --system --gid 1001 nodejs RUN adduser --system --uid 1001 nextjs USER nextjs # 从构建阶段复制必要文件 COPY --from=builder /app/public ./public COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static # 设置环境变量 ENV PORT 3000 # 暴露端口 EXPOSE 3000 # 启动命令 CMD ["node", "server.js"]