javaeeduke commited on
Commit
5772276
·
verified ·
1 Parent(s): 20ebd03

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +27 -16
Dockerfile CHANGED
@@ -1,36 +1,47 @@
1
  FROM node:20-slim AS builder
2
-
3
  WORKDIR /app
4
-
5
- # 1. 安装 git 并克隆最新官方源码
6
  RUN apt-get update && apt-get install -y git && rm -rf /var/lib/apt/lists/*
7
  RUN git clone https://github.com/tashfeenahmed/freellmapi.git .
8
-
9
- # 2. 安装全部依赖
10
  RUN npm install
11
-
12
- # 3. 编译所有子工作区(前端 + 后端)
13
  RUN npm run build
14
 
15
  # --- 生产运行环境 ---
16
  FROM node:20-slim AS runner
17
  WORKDIR /app
18
 
19
- # 4. 复制编译产物
20
- COPY --from=builder /app ./
 
 
 
21
 
22
- # 5. 开辟持久化目录
23
  RUN mkdir -p /data/freellm
24
 
25
- # 6. 【绝杀技巧】:把前端打包出来的静态网页文件,直接物理制进后端的静态资源公开目录下!
26
- # 这样当通过 7860 端口直接访问根目录时,后端会自动吐出前端管理面板
27
  RUN cp -r client/dist/* server/dist/public/ 2>/dev/null || cp -r client/dist/* server/public/ 2>/dev/null || true
28
 
29
- # 7. 核心环境变量注入
30
  EXPOSE 7860
31
- ENV PORT=7860
32
  ENV NODE_ENV=production
33
  ENV DATABASE_URL="file:/data/database.sqlite"
34
 
35
- # 8. 启动命令(保留内存软链接持久化机制)
36
- CMD ["sh", "-c", "rm -rf /app/server/data && ln -s /data/freellm /app/server/data && export ENCRYPTION_KEY=$(node -e \"console.log(require('crypto').randomBytes(32).toString('hex'))\") && node server/dist/index.js"]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  FROM node:20-slim AS builder
 
2
  WORKDIR /app
 
 
3
  RUN apt-get update && apt-get install -y git && rm -rf /var/lib/apt/lists/*
4
  RUN git clone https://github.com/tashfeenahmed/freellmapi.git .
 
 
5
  RUN npm install
 
 
6
  RUN npm run build
7
 
8
  # --- 生产运行环境 ---
9
  FROM node:20-slim AS runner
10
  WORKDIR /app
11
 
12
+ # 1. 安装用于网络转发和基础认证的 caddy(极其轻量且极其安全)
13
+ RUN apt-get update && apt-get install -y debian-keyring debian-archive-keyring apt-transport-https curl \
14
+ && curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | apt-key add - \
15
+ && curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | tee /etc/apt/sources.list.yandex.net/caddy/stable.list \
16
+ && apt-get update && apt-get install -y caddy && rm -rf /var/lib/apt/lists/*
17
 
18
+ COPY --from=builder /app ./
19
  RUN mkdir -p /data/freellm
20
 
21
+ # 2. 路由修
 
22
  RUN cp -r client/dist/* server/dist/public/ 2>/dev/null || cp -r client/dist/* server/public/ 2>/dev/null || true
23
 
24
+ # 3. 环境变量(让 FreeLLMAPI 后端改退到内部 8080 端口,把 7860 留给密码锁)
25
  EXPOSE 7860
26
+ ENV PORT=8080
27
  ENV NODE_ENV=production
28
  ENV DATABASE_URL="file:/data/database.sqlite"
29
 
30
+ # 4. 【核心绝杀】:动态生成密码锁配置文件,并启动全套服务
31
+ CMD ["sh", "-c", "rm -rf /app/server/data && ln -s /data/freellm /app/server/data && \
32
+ # 如果你在 HF Settings 里配了这两个 secret,就用你配的;没配就默认 admin/admin123 \
33
+ USER=${SPACE_BASIC_AUTH_USERNAME:-admin} && \
34
+ PASS=${SPACE_BASIC_AUTH_PASSWORD:-admin123} && \
35
+ HASHED_PASS=$(caddy hash-password --plaintext \"$PASS\") && \
36
+ # 现场印制 Caddyfile 配置文件 \
37
+ echo \":7860 {\" > Caddyfile && \
38
+ echo \" basic_auth / { \" >> Caddyfile && \
39
+ echo \" $USER $HASHED_PASS\" >> Caddyfile && \
40
+ echo \" }\" >> Caddyfile && \
41
+ echo \" reverse_proxy localhost:8080\" >> Caddyfile && \
42
+ echo \"}\" >> Caddyfile && \
43
+ # 动态计算密钥并后台启动 API 引擎 \
44
+ export ENCRYPTION_KEY=$(node -e \"console.log(require('crypto').randomBytes(32).toString('hex'))\") && \
45
+ node server/dist/index.js & \
46
+ # 前台启动密码锁守护进程 \
47
+ caddy run --config Caddyfile\"]