| # 阶段 1: 构建应用 |
| FROM node:bullseye AS builder |
| |
| # 设置工作目录 |
| WORKDIR /app |
| |
| # 安装依赖 (利用 Docker 层缓存) |
| COPY package.json yarn.lock* package-lock.json* ./ |
| RUN npm ci --omit=dev |
| |
| # 复制源代码 |
| COPY . . |
| |
| # 构建应用 (standalone 模式) |
| RUN npm run build |
| |
| # 阶段 2: 创建轻量级运行环境 |
| FROM node:bullseye AS runner |
| WORKDIR /app |
| |
| # 不要以 root 用户运行 |
| RUN addgroup --system --gid 1001 nodejs |
| RUN adduser --system --uid 1001 nextjs |
| USER nextjs |
| |
| # 从构建阶段复制必要文件 |
| COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ |
| COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static |
| COPY --from=builder --chown=nextjs:nodejs /app/public ./public |
| |
| # 设置环境变量 |
| ENV NODE_ENV=production |
| ENV PORT=3000 |
| |
| # 暴露端口 |
| EXPOSE 3000 |
| |
| # 启动命令 |
| CMD ["node", "server.js"] |