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. 编译所有子工作区(包含 server 和 client) 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. 核心环境变量注入 ENV PORT=7860 ENV NODE_ENV=production # 强行把 SQLite 数据库文件的生成位置指向你的持久化 Bucket 目录 ENV DATABASE_URL="file:/data/database.sqlite" # 7. 暴露端口 EXPOSE 7860 # 8. 绝杀:使用内置的 node 动态生成 64 位完美的 Hex 密钥并启动服务 # 这完美满足了作者代码里对 64 hex chars 的死规定! CMD ["sh", "-c", "export ENCRYPTION_KEY=$(node -e \"console.log(require('crypto').randomBytes(32).toString('hex'))\") && node server/dist/index.js"]