Spaces:
Running
Running
Update Dockerfile
Browse files- Dockerfile +5 -50
Dockerfile
CHANGED
|
@@ -1,55 +1,10 @@
|
|
| 1 |
-
FROM
|
| 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 |
-
|
| 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 && ln -sf /data /app/server/data
|
| 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 |
-
|
| 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 |
-
# 移除所有在外部手动调用的 prisma 指令,直接交给项目原本的 dev 命令去跑,它内部自己会处理数据库初始化!
|
| 55 |
-
CMD ["npm", "run", "dev"]
|
|
|
|
| 1 |
+
FROM python:3.11-slim
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2 |
|
|
|
|
|
|
|
| 3 |
WORKDIR /app
|
| 4 |
+
COPY requirements.txt .
|
| 5 |
+
RUN pip install --no-cache-dir -r requirements.txt
|
| 6 |
|
| 7 |
+
COPY . .
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 8 |
|
|
|
|
| 9 |
EXPOSE 7860
|
| 10 |
+
CMD ["python", "main.py"]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|