# 龙枢/渊枢 HF Space Backend # Node.js 20 - rebuild + supervisord + nginx FROM node:20-alpine # 安装supervisor和nginx RUN apk add --no-cache supervisor nginx curl # 创建应用目录 WORKDIR /app # 复制依赖文件 COPY package*.json ./ # 安装所有依赖(包括devDependencies用于构建) RUN npm ci # 复制TypeScript配置 COPY tsconfig.json ./ COPY src ./src # 安装 Chromium 及依赖(爬虫必需,Alpine 系统) RUN apk add --no-cache \ chromium \ nss \ freetype \ harfbuzz \ ca-certificates \ font-noto-cjk \ font-wqy-zenhei \ ttf-freefont ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser # 构建 TypeScript RUN npm run build # 构建完成后删除开发依赖,减小镜像体积 RUN npm prune --production # 复制配置文件和启动脚本 COPY supervisord.conf /etc/supervisor/conf.d/app.conf COPY nginx.conf /etc/nginx/nginx.conf COPY scripts /app/scripts RUN chmod +x /app/scripts/*.sh # 创建必要目录 RUN mkdir -p /app/logs /app/showcase /run/nginx # 复制静态资源(showcase) COPY showcase ./showcase COPY src/public ./public # 设置权限 RUN chmod -R 755 /app/logs # 暴露HF必需端口 EXPOSE 7860 # 健康检查(使用正确的路由) HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \ CMD curl -f http://localhost:3000/internal/health || exit 1 # 启动入口脚本(清理旧进程 + supervisor) CMD ["/app/scripts/entrypoint.sh"]