Spaces:
Running
Running
Update Dockerfile
Browse files- Dockerfile +9 -52
Dockerfile
CHANGED
|
@@ -15,63 +15,20 @@ RUN mkdir -p /data/freellm
|
|
| 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 |
EXPOSE 7860
|
| 20 |
ENV PORT=7860
|
| 21 |
-
|
|
|
|
| 22 |
ENV DATABASE_URL="file:/data/database.sqlite"
|
| 23 |
|
| 24 |
-
# 3. 【无损看门狗】
|
| 25 |
-
# 无论项目底层怎么写、变量叫什么名字,只要请求进来,首先必过此关,绝不引发任何语法冲突!
|
| 26 |
RUN echo "import fs from 'fs';" > security.js && \
|
| 27 |
-
|
| 28 |
-
echo "if (fs.existsSync(file)) {" >> security.js && \
|
| 29 |
-
echo " let content = fs.readFileSync(file, 'utf8');" >> security.js && \
|
| 30 |
-
echo " const injectCode = \` \
|
| 31 |
-
import http from 'http'; \
|
| 32 |
-
const originalCreateServer = http.createServer; \
|
| 33 |
-
http.createServer = function(onion) { \
|
| 34 |
-
return originalCreateServer.call(this, (req, res) => { \
|
| 35 |
-
const user = process.env.SPACE_BASIC_AUTH_USERNAME || 'admin'; \
|
| 36 |
-
const pass = process.env.SPACE_BASIC_AUTH_PASSWORD || 'admin123'; \
|
| 37 |
-
if (req.url.startsWith('/v1')) return onion(req, res); \
|
| 38 |
-
const b64auth = (req.headers.authorization || '').split(' ')[1] || ''; \
|
| 39 |
-
const [login, password] = Buffer.from(b64auth, 'base64').toString().split(':'); \
|
| 40 |
-
if (login === user && password === pass) return onion(req, res); \
|
| 41 |
-
res.statusCode = 401; \
|
| 42 |
-
res.setHeader('WWW-Authenticate', 'Basic realm=\"Secure\"'); \
|
| 43 |
-
res.end('Unauthorized'); \
|
| 44 |
-
}); \
|
| 45 |
-
}; \n\`;" >> security.js && \
|
| 46 |
-
echo " fs.writeFileSync(file, injectCode + content, 'utf8');" >> security.js && \
|
| 47 |
echo "}" >> security.js
|
| 48 |
|
| 49 |
-
#
|
| 50 |
-
CMD
|
| 51 |
-
# ... 前面保持你原本的 Dockerfile 不变 ...
|
| 52 |
-
|
| 53 |
-
CMD node -e " \
|
| 54 |
-
const fs = require('fs'); \
|
| 55 |
-
const path = require('path'); \
|
| 56 |
-
const dbPath = path.join(__dirname, 'server/prisma/dev.db'); \
|
| 57 |
-
if (fs.existsSync(dbPath)) { \
|
| 58 |
-
try { \
|
| 59 |
-
const sqlite3 = require('sqlite3').verbose(); \
|
| 60 |
-
const db = new sqlite3.Database(dbPath); \
|
| 61 |
-
db.serialize(() => { \
|
| 62 |
-
const maps = { GOOGLE_API_KEY:'google', GROQ_API_KEY:'groq', GITHUB_TOKEN:'github', OPENROUTER_API_KEY:'openrouter', MISTRAL_API_KEY:'mistral', TOGETHER_API_KEY:'together', NVIDIA_API_KEY:'nvidia', COHERE_API_KEY:'cohere', HF_TOKEN:'huggingface', CEREBRAS_API_KEY:'cerebras', SAMBANOVA_API_KEY:'sambanova', CLOUDFLARE_API_TOKEN:'cloudflare', ZHIPU_API_KEY:'zhipu' }; \
|
| 63 |
-
const now = new Date().toISOString(); \
|
| 64 |
-
Object.entries(maps).forEach(([k, p]) => { \
|
| 65 |
-
const val = process.env[k]; \
|
| 66 |
-
if (!val) return; \
|
| 67 |
-
db.get('SELECT id FROM Provider WHERE provider = ?', [p], (err, row) => { \
|
| 68 |
-
if (!row) { \
|
| 69 |
-
db.run('INSERT INTO Provider (id, name, provider, apiKey, status, createdAt, updatedAt) VALUES (?, ?, ?, ?, ?, ?, ?)', [require('crypto').randomUUID(), p, p, val, 'active', now, now], (e) => { \
|
| 70 |
-
if(!e) console.log('✅ Auto-linked: ' + p); \
|
| 71 |
-
}); \
|
| 72 |
-
} \
|
| 73 |
-
}); \
|
| 74 |
-
}); \
|
| 75 |
-
}); \
|
| 76 |
-
} catch(e) { console.log('Prisma initializing...'); } \
|
| 77 |
-
}" && npm run dev
|
|
|
|
| 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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|