Files
2026-03-25 18:50:58 +08:00

49 lines
1.3 KiB
Docker
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ============================================
# 多阶段构建:构建阶段
# ============================================
FROM node:20-alpine AS builder
WORKDIR /app
# 复制 package 文件
COPY package*.json ./
# 安装依赖(使用 npm ci 确保依赖版本一致)
RUN npm ci
# 复制源代码
COPY . .
# 说明:
# - 当前前端请求统一走同域 `/api/*`(由反向代理转发到后端),避免在镜像构建时固化域名/端口
# - 因此不再需要 NEXT_PUBLIC_API_BASE_URL / NEXT_PUBLIC_BACKEND_PORT 这类 build-args
# 构建 Next.js 应用
RUN npm run build
# ============================================
# 运行阶段
# ============================================
FROM node:20-alpine
WORKDIR /app
# 设置生产环境
ENV NODE_ENV=production
# 复制 package 文件(用于安装生产依赖)
COPY package*.json ./
# 只安装生产依赖;生产阶段仅使用 next.config.mjs,不复制 .ts,避免 next start 触发任何 npm install
RUN npm ci --only=production && npm cache clean --force
# 从构建阶段复制必要的文件(仅 .mjs 配置,Next 不会加载 .ts 故不会尝试安装 TypeScript
COPY --from=builder /app/next.config.mjs ./
COPY --from=builder /app/public ./public
COPY --from=builder /app/.next ./.next
# 暴露端口
EXPOSE 3000
# 启动 Next.js 生产服务器
CMD ["npm", "start"]