# ===== 构建阶段 ===== FROM node:22-alpine AS deps WORKDIR /app COPY package.json package-lock.json .npmrc ./ RUN npm ci FROM node:22-alpine AS builder WORKDIR /app COPY --from=deps /app/node_modules ./node_modules COPY . . ENV NEXT_TELEMETRY_DISABLED=1 RUN npm run build # ===== 运行阶段 ===== FROM node:22-alpine AS runner WORKDIR /app ENV NODE_ENV=production \ NEXT_TELEMETRY_DISABLED=1 \ PORT=3000 \ HOSTNAME=0.0.0.0 # standalone 产物自带精简 node_modules(仅够 server.js 运行) COPY --from=builder /app/.next/standalone ./ # 用完整生产依赖覆盖:独立迁移脚本(migrate.mjs)需要真实的 drizzle-orm/mysql2 包 COPY --from=deps /app/node_modules ./node_modules COPY --from=builder /app/.next/static ./.next/static COPY --from=builder /app/public ./public # 数据库迁移资源与脚本 COPY --from=builder /app/drizzle ./drizzle COPY --from=builder /app/scripts/migrate.mjs ./scripts/migrate.mjs COPY docker-entrypoint.sh ./ RUN chmod +x docker-entrypoint.sh EXPOSE 3000 ENTRYPOINT ["./docker-entrypoint.sh"]