javaeeduke commited on
Commit
dea8ef6
·
verified ·
1 Parent(s): ddb09f2

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +28 -8
Dockerfile CHANGED
@@ -9,26 +9,46 @@ RUN npm run build
9
  FROM node:20-slim AS runner
10
  WORKDIR /app
11
 
 
 
 
12
  COPY --from=builder /app ./
13
  RUN mkdir -p /data/freellm
14
 
15
  # 1. 前端静态路由修复
16
  RUN cp -r client/dist/* server/dist/public/ 2>/dev/null || cp -r client/dist/* server/public/ 2>/dev/null || true
17
 
18
- # 2. 注入基础配置
19
- # ... 前面保持你的代码不变 ...
20
-
21
  # 2. 注入基础配置
22
  EXPOSE 7860
23
  ENV PORT=7860
24
- # 💡 核心修改:移除 production,开启 DEV_MODE 绕过报错
25
  ENV DEV_MODE=true
26
  ENV DATABASE_URL="file:/data/database.sqlite"
27
 
28
- # 3. 【无损看门狗】代码保持你原本的逻辑不变 ...
29
  RUN echo "import fs from 'fs';" > security.js && \
30
- # ...(中间省略你的 watchdog 写入逻辑)...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
31
  echo "}" >> security.js
32
 
33
- # 💡 核心修在启动服务之前,利用 prisma 自动在你的持久化路径同步创建数据库表结构
34
- CMD npx prisma db push --schema=server/prisma/schema.prisma && npm run dev
 
 
 
9
  FROM node:20-slim AS runner
10
  WORKDIR /app
11
 
12
+ # 补全 Prisma 运行所需的 openssl 依赖,防止报错
13
+ RUN apt-get update && apt-get install -y openssl && rm -rf /var/lib/apt/lists/*
14
+
15
  COPY --from=builder /app ./
16
  RUN mkdir -p /data/freellm
17
 
18
  # 1. 前端静态路由修复
19
  RUN cp -r client/dist/* server/dist/public/ 2>/dev/null || cp -r client/dist/* server/public/ 2>/dev/null || true
20
 
 
 
 
21
  # 2. 注入基础配置
22
  EXPOSE 7860
23
  ENV PORT=7860
 
24
  ENV DEV_MODE=true
25
  ENV DATABASE_URL="file:/data/database.sqlite"
26
 
27
+ # 3. 【无损看门狗】保持你原本的逻辑不变
28
  RUN echo "import fs from 'fs';" > security.js && \
29
+ echo "const file = 'server/dist/index.js';" >> security.js && \
30
+ echo "if (fs.existsSync(file)) {" >> security.js && \
31
+ echo " let content = fs.readFileSync(file, 'utf8');" >> security.js && \
32
+ echo " const injectCode = \` \
33
+ import http from 'http'; \
34
+ const originalCreateServer = http.createServer; \
35
+ http.createServer = function(onion) { \
36
+ return originalCreateServer.call(this, (req, res) => { \
37
+ const user = process.env.SPACE_BASIC_AUTH_USERNAME || 'admin'; \
38
+ const pass = process.env.SPACE_BASIC_AUTH_PASSWORD || 'admin123'; \
39
+ if (req.url.startsWith('/v1')) return onion(req, res); \
40
+ const b64auth = (req.headers.authorization || '').split(' ')[1] || ''; \
41
+ const [login, password] = Buffer.from(b64auth, 'base64').toString().split(':'); \
42
+ if (login === user && password === pass) return onion(req, res); \
43
+ res.statusCode = 401; \
44
+ res.setHeader('WWW-Authenticate', 'Basic realm=\"Secure\"'); \
45
+ res.end('Unauthorized'); \
46
+ }); \
47
+ }; \n\`;" >> security.js && \
48
+ echo " fs.writeFileSync(file, injectCode + content, 'utf8');" >> security.js && \
49
  echo "}" >> security.js
50
 
51
+ # 💡 核心修复点
52
+ # 1. 使用 --schema=./server/prisma/schema.prisma 精确定位文件
53
+ # 2. 强制指定环境变量,确保数据库表结构安全同步到 /data/database.sqlite
54
+ CMD DATABASE_URL="file:/data/database.sqlite" npx prisma db push --schema=./server/prisma/schema.prisma && npm run dev