Spaces:
Paused
Paused
| FROM node:20-slim AS builder | |
| WORKDIR /app | |
| # 1. 安装 git 并克隆最新官方源码 | |
| RUN apt-get update && apt-get install -y git && rm -rf /var/lib/apt/lists/* | |
| RUN git clone https://github.com/tashfeenahmed/freellmapi.git . | |
| # 2. 安装全部依赖(包含开发依赖以供编译) | |
| RUN npm install | |
| # 3. 执行编译(将 TypeScript 源码打包成原生 JS) | |
| RUN npm run build | |
| # --- 生产运行环境剪裁 --- | |
| FROM node:20-slim AS runner | |
| WORKDIR /app | |
| # 4. 从编译层把所有打包好的产物和依赖全盘复制过来 | |
| COPY --from=builder /app ./ | |
| # 5. 强行开辟 Hugging Face 的持久化存储目录(防数据丢失) | |
| RUN mkdir -p /data | |
| # 6. 核心环境变量注入: | |
| # 强制让后端服务去监听 Hugging Face 唯一的 7860 端口 | |
| ENV PORT=7860 | |
| ENV NODE_ENV=production | |
| # 告诉 FreeLLMAPI 把它的 SQLite 数据库死死钉在持久化目录里 | |
| ENV DATABASE_URL="file:/data/database.sqlite" | |
| # 7. 暴露端口 | |
| EXPOSE 7860 | |
| # 8. 绝杀:直接用 node 引导编译后的入口文件,彻底绕过 npm run start 的限制! | |
| # 备注:如果官方编译后的入口在 dist 目录,直接用 node 运行它 | |
| CMD ["node", "dist/index.js"] |