Spaces:
Running
Running
Update Dockerfile
Browse files- 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 |
-
#
|
| 20 |
-
|
|
|
|
|
|
|
|
|
|
| 21 |
|
| 22 |
-
|
| 23 |
RUN mkdir -p /data/freellm
|
| 24 |
|
| 25 |
-
#
|
| 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 |
-
#
|
| 30 |
EXPOSE 7860
|
| 31 |
-
ENV PORT=
|
| 32 |
ENV NODE_ENV=production
|
| 33 |
ENV DATABASE_URL="file:/data/database.sqlite"
|
| 34 |
|
| 35 |
-
#
|
| 36 |
-
CMD ["sh", "-c", "rm -rf /app/server/data && ln -s /data/freellm /app/server/data &&
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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\"]
|