LaoeGaoci | 6b25610 | 2025-06-03 13:51:11 +0800 | [diff] [blame] | 1 | # 阶段 1: 构建应用 |
| 2 | FROM node:bullseye AS builder |
| 3 | |
| 4 | # 设置工作目录 |
| 5 | WORKDIR /app |
| 6 | |
| 7 | # 安装依赖 (利用 Docker 层缓存) |
| 8 | COPY package.json yarn.lock* package-lock.json* ./ |
| 9 | RUN npm ci --omit=dev |
| 10 | |
| 11 | # 复制源代码 |
| 12 | COPY . . |
| 13 | |
| 14 | # 构建应用 (standalone 模式) |
| 15 | RUN npm run build |
| 16 | |
| 17 | # 阶段 2: 创建轻量级运行环境 |
| 18 | FROM node:bullseye AS runner |
| 19 | WORKDIR /app |
| 20 | |
| 21 | # 不要以 root 用户运行 |
| 22 | RUN addgroup --system --gid 1001 nodejs |
| 23 | RUN adduser --system --uid 1001 nextjs |
| 24 | USER nextjs |
| 25 | |
| 26 | # 从构建阶段复制必要文件 |
| 27 | COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ |
| 28 | COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static |
| 29 | COPY --from=builder --chown=nextjs:nodejs /app/public ./public |
| 30 | |
| 31 | # 设置环境变量 |
| 32 | ENV NODE_ENV=production |
Seamher | 11a11b3 | 2025-06-09 23:11:58 +0800 | [diff] [blame] | 33 | ENV PORT=3009 |
LaoeGaoci | 6b25610 | 2025-06-03 13:51:11 +0800 | [diff] [blame] | 34 | |
| 35 | # 暴露端口 |
Seamher | 11a11b3 | 2025-06-09 23:11:58 +0800 | [diff] [blame] | 36 | EXPOSE 3009 |
LaoeGaoci | 6b25610 | 2025-06-03 13:51:11 +0800 | [diff] [blame] | 37 | |
| 38 | # 启动命令 |
| 39 | CMD ["node", "server.js"] |