# 使用官方 Node.js 18 Alpine 镜像作为基础镜像 FROM node:18-alpine AS base # 构建参数 ARG GIT_COMMIT="" ARG GIT_BRANCH="" ARG BUILD_TIME="" # 设置环境变量 ENV GIT_COMMIT=$GIT_COMMIT ENV GIT_BRANCH=$GIT_BRANCH ENV BUILD_TIME=$BUILD_TIME # 设置工作目录 WORKDIR /app # 复制 package.json 和 package-lock.json (如果存在) COPY package*.json ./ # 安装依赖 RUN npm install --only=production && npm cache clean --force # 构建阶段 FROM base AS build # 安装所有依赖(包括开发依赖) RUN npm install # 复制源代码 COPY . . # 构建应用 RUN npm run build # 生产阶段 FROM node:18-alpine AS production # 设置环境变量 ENV NODE_ENV=production # 创建非root用户 RUN addgroup -g 1001 -S nodejs RUN adduser -S nestjs -u 1001 # 设置工作目录 WORKDIR /app # 复制 package.json COPY package*.json ./ # 安装生产依赖 RUN npm install --only=production && npm cache clean --force # 从构建阶段复制构建产物 COPY --from=build --chown=nestjs:nodejs /app/dist ./dist # 切换到非root用户 USER nestjs # 暴露端口 EXPOSE 3000 # 健康检查 HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ CMD curl -f http://localhost:3000/health || exit 1 # 启动应用 CMD ["node", "dist/main"]