# 备选方案 - 使用Debian基础镜像解决bcrypt构建问题 # 多阶段构建 - 构建阶段 FROM node:20-slim AS builder # 安装构建依赖,包括bcrypt编译所需的工具 RUN apt-get update && apt-get install -y \ python3 \ make \ g++ \ libcairo2-dev \ libpango1.0-dev \ libjpeg-dev \ libgif-dev \ librsvg2-dev \ build-essential \ && rm -rf /var/lib/apt/lists/* WORKDIR /app # 复制package文件 COPY package*.json ./ COPY tsconfig*.json ./ # 安装依赖 RUN npm ci --only=production && \ npm cache clean --force # 复制源代码 COPY src ./src # 构建应用 RUN npm run build # 开发阶段 FROM node:20-slim AS development # 安装运行时依赖和构建工具 RUN apt-get update && apt-get install -y \ python3 \ make \ g++ \ libcairo2-dev \ libpango1.0-dev \ libjpeg-dev \ libgif-dev \ librsvg2-dev \ build-essential \ && rm -rf /var/lib/apt/lists/* WORKDIR /app COPY package*.json ./ RUN npm install COPY . . EXPOSE 3000 9229 CMD ["npm", "run", "dev"] # 生产阶段 FROM node:20-slim AS production # 安装运行时依赖 RUN apt-get update && apt-get install -y \ python3 \ make \ g++ \ libcairo2-dev \ libpango1.0-dev \ libjpeg-dev \ libgif-dev \ librsvg2-dev \ build-essential \ && rm -rf /var/lib/apt/lists/* WORKDIR /app # 创建非root用户 RUN groupadd -r nodejs && \ useradd -r -g nodejs -u 1001 nodejs # 复制依赖 COPY package*.json ./ RUN npm ci --only=production && \ npm cache clean --force # 从构建阶段复制构建产物 COPY --from=builder --chown=nodejs:nodejs /app/dist ./dist COPY --from=builder --chown=nodejs:nodejs /app/node_modules ./node_modules # 切换到非root用户 USER nodejs # 暴露端口 EXPOSE 3000 # 健康检查 HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ CMD node dist/utils/healthcheck.js || exit 1 # 启动应用 CMD ["node", "dist/server.js"]