Spaces:
Sleeping
Sleeping
| # 构建阶段 | |
| FROM node:18-alpine AS builder | |
| # 设置工作目录 | |
| WORKDIR /app | |
| # 安装构建依赖(包括Python和make,某些npm包需要) | |
| RUN apk add --no-cache python3 make g++ | |
| # 复制package文件以优化Docker层缓存 | |
| COPY package.json package-lock.json ./ | |
| # 安装所有依赖(包括devDependencies) | |
| RUN npm ci | |
| # 复制源代码 | |
| COPY . . | |
| # 接收版本号参数并更新 package.json | |
| ARG VERSION | |
| RUN if [ -n "$VERSION" ]; then \ | |
| echo "Updating package.json version to $VERSION"; \ | |
| sed -i "s/\"version\": \"[^\"]*\"/\"version\": \"$VERSION\"/" package.json; \ | |
| cat package.json | grep version; \ | |
| fi | |
| # 构建应用 | |
| RUN npm run build | |
| # 生产阶段 | |
| FROM node:18-alpine AS production | |
| # 安装健康检查工具 | |
| RUN apk add --no-cache wget | |
| # 设置工作目录 | |
| WORKDIR /app | |
| # 复制 package.json(使用构建阶段已更新版本)与 package-lock.json | |
| COPY --from=builder /app/package.json ./package.json | |
| COPY --from=builder /app/package-lock.json ./package-lock.json | |
| # 只安装生产依赖 | |
| RUN npm ci --omit=dev && \ | |
| npm cache clean --force | |
| # 从构建阶段复制构建产物 | |
| COPY --from=builder --chown=node:node /app/dist ./dist | |
| COPY --from=builder --chown=node:node /app/configs ./configs | |
| # 创建应用需要的目录并设置权限 | |
| RUN mkdir -p /app/logs /app/tmp && \ | |
| chown -R node:node /app/logs /app/tmp | |
| # 设置环境变量 | |
| ENV SERVER_PORT=5100 | |
| # 切换到非root用户 | |
| USER node | |
| # 暴露端口 | |
| EXPOSE 5100 | |
| # 健康检查 | |
| HEALTHCHECK --interval=15s --timeout=5s --start-period=20s --retries=3 \ | |
| CMD wget -q --spider http://localhost:5100/ping | |
| # 启动应用 | |
| CMD ["npm", "start"] | |