Spaces:
Running
Running
| # 构建阶段 | |
| FROM node:18-alpine AS builder | |
| # 设置工作目录 | |
| WORKDIR /app | |
| # 安装构建依赖(包括Python和make,某些npm包需要) | |
| RUN apk add --no-cache python3 git make g++ | |
| RUN git clone https://github.com/iptag/jimeng-api.git . | |
| # 安装所有依赖(包括devDependencies) | |
| RUN npm ci --registry https://registry.npmmirror.com/ | |
| # 复制源代码 | |
| 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 | |
| # 创建非root用户 | |
| RUN addgroup -g 1001 -S nodejs && \ | |
| adduser -S jimeng -u 1001 | |
| # 设置工作目录 | |
| 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 --registry https://registry.npmmirror.com/ && \ | |
| npm cache clean --force | |
| # 从构建阶段复制构建产物 | |
| COPY --from=builder --chown=jimeng:nodejs /app/dist ./dist | |
| COPY --from=builder --chown=jimeng:nodejs /app/configs ./configs | |
| # 创建应用需要的目录并设置权限 | |
| RUN mkdir -p /app/logs /app/tmp && \ | |
| chown -R jimeng:nodejs /app/logs /app/tmp | |
| # 设置环境变量 | |
| ENV SERVER_PORT=5100 | |
| # 切换到非root用户 | |
| USER jimeng | |
| # 暴露端口 | |
| EXPOSE 5100 | |
| # 健康检查 | |
| HEALTHCHECK --interval=15s --timeout=5s --start-period=20s --retries=3 \ | |
| CMD wget -q --spider http://localhost:5100/ping | |
| # 启动应用 | |
| CMD ["npm", "start"] | |