# 多阶段构建 Dockerfile - 支持多客户部署 # 每个客户构建时通过 ARG 传入不同的 VITE_API_BASE_URL # ============================================ # 构建阶段 - 使用阿里云镜像 # ============================================ FROM node:18-alpine AS builder # 设置工作目录 WORKDIR /app # 接收构建参数(关键!每个客户构建时传入不同的值) ARG NODE_ENV=production ARG VITE_API_BASE_URL=https://aiedu.ireborn.com.cn ARG VITE_WS_BASE_URL=wss://aiedu.ireborn.com.cn ARG VITE_USE_MOCK_DATA=false # 设置环境变量(构建时使用) ENV NODE_ENV=$NODE_ENV ENV VITE_API_BASE_URL=$VITE_API_BASE_URL ENV VITE_WS_BASE_URL=$VITE_WS_BASE_URL ENV VITE_USE_MOCK_DATA=$VITE_USE_MOCK_DATA # 复制 package 文件 COPY package*.json ./ # 配置npm使用阿里云镜像 RUN npm config set registry https://registry.npmmirror.com # 安装所有依赖(包括开发依赖,跳过husky) RUN npm install --silent --ignore-scripts # 复制源代码 COPY . . # 打印环境变量以便调试(构建日志中可见) RUN echo "======================================" && \ echo "Build environment for this customer:" && \ echo "NODE_ENV=$NODE_ENV" && \ echo "VITE_API_BASE_URL=$VITE_API_BASE_URL" && \ echo "VITE_WS_BASE_URL=$VITE_WS_BASE_URL" && \ echo "VITE_USE_MOCK_DATA=$VITE_USE_MOCK_DATA" && \ echo "======================================" # 构建应用(使用环境变量中的API地址) RUN npm run build # ============================================ # 生产阶段 - 轻量级nginx镜像 # ============================================ FROM nginx:alpine AS production # 安装curl用于健康检查 RUN apk add --no-cache curl # 复制自定义 nginx 配置 COPY docker/nginx.conf /etc/nginx/nginx.conf COPY docker/default.conf /etc/nginx/conf.d/default.conf # 从构建阶段复制构建产物 COPY --from=builder /app/dist /usr/share/nginx/html # 暴露端口 EXPOSE 80 # 健康检查 HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ CMD curl -f http://localhost:80/ || exit 1 # 启动 nginx CMD ["nginx", "-g", "daemon off;"] # ============================================ # 开发阶段(可选) # ============================================ FROM node:18-alpine AS development # 设置工作目录 WORKDIR /app # 复制 package 文件 COPY package*.json ./ # 配置npm使用阿里云镜像 RUN npm config set registry https://registry.npmmirror.com # 安装所有依赖(包括开发依赖,跳过husky) RUN npm install --silent --ignore-scripts # 复制源代码 COPY . . # 暴露端口 EXPOSE 3001 # 启动开发服务器 CMD ["npm", "run", "dev"]