| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- # 备选方案 - 使用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"]
|