File size: 1,172 Bytes
8a59281
 
 
 
3cad9f5
8a59281
 
 
3cad9f5
8a59281
3cad9f5
 
8a59281
 
3cad9f5
8a59281
 
 
3cad9f5
8a59281
 
3cad9f5
 
8a59281
3cad9f5
 
8a59281
 
3cad9f5
 
 
 
 
8a59281
3cad9f5
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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"]