# 多阶段构建 - 前端 FROM node:18-alpine AS frontend-build WORKDIR /app/client # 复制前端package文件 COPY client/package*.json ./ # 安装前端依赖 RUN npm ci --only=production # 复制前端源代码 COPY client/ ./ # 构建前端应用 RUN npm run build # 多阶段构建 - 后端 FROM node:18-alpine AS backend WORKDIR /app # 安装系统依赖 RUN apk add --no-cache \ python3 \ make \ g++ \ cairo-dev \ jpeg-dev \ pango-dev \ musl-dev \ giflib-dev \ pixman-dev \ pangomm-dev \ libjpeg-turbo-dev \ freetype-dev # 复制后端package文件 COPY server/package*.json ./ # 安装后端依赖 RUN npm ci --only=production # 复制后端源代码 COPY server/ ./ # 从前端构建阶段复制构建结果 COPY --from=frontend-build /app/client/build ./public # 创建必要的目录 RUN mkdir -p uploads outputs logs # 设置权限 RUN chown -R node:node /app # 切换到非root用户 USER node # 暴露端口 EXPOSE 3001 # 健康检查 HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ CMD node healthcheck.js # 启动命令 CMD ["npm", "start"]