Spaces:
Runtime error
Runtime error
File size: 2,216 Bytes
8a59281 2a67ddb 8a59281 5772276 8a59281 5772276 eadc41e 8a59281 5772276 20ebd03 5772276 eadc41e 5772276 8a59281 20ebd03 2a67ddb 5772276 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | FROM node:20-slim AS builder
WORKDIR /app
RUN apt-get update && apt-get install -y git && rm -rf /var/lib/apt/lists/*
RUN git clone https://github.com/tashfeenahmed/freellmapi.git .
RUN npm install
RUN npm run build
# --- 生产运行环境 ---
FROM node:20-slim AS runner
WORKDIR /app
# 1. 安装用于网络转发和基础认证的 caddy(极其轻量且极其安全)
RUN apt-get update && apt-get install -y debian-keyring debian-archive-keyring apt-transport-https curl \
&& curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | apt-key add - \
&& curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | tee /etc/apt/sources.list.yandex.net/caddy/stable.list \
&& apt-get update && apt-get install -y caddy && rm -rf /var/lib/apt/lists/*
COPY --from=builder /app ./
RUN mkdir -p /data/freellm
# 2. 路由修复
RUN cp -r client/dist/* server/dist/public/ 2>/dev/null || cp -r client/dist/* server/public/ 2>/dev/null || true
# 3. 环境变量(让 FreeLLMAPI 后端改退到内部 8080 端口,把 7860 留给密码锁)
EXPOSE 7860
ENV PORT=8080
ENV NODE_ENV=production
ENV DATABASE_URL="file:/data/database.sqlite"
# 4. 【核心绝杀】:动态生成密码锁配置文件,并启动全套服务
CMD ["sh", "-c", "rm -rf /app/server/data && ln -s /data/freellm /app/server/data && \
# 如果你在 HF Settings 里配了这两个 secret,就用你配的;没配就默认 admin/admin123 \
USER=${SPACE_BASIC_AUTH_USERNAME:-admin} && \
PASS=${SPACE_BASIC_AUTH_PASSWORD:-admin123} && \
HASHED_PASS=$(caddy hash-password --plaintext \"$PASS\") && \
# 现场印制 Caddyfile 配置文件 \
echo \":7860 {\" > Caddyfile && \
echo \" basic_auth / { \" >> Caddyfile && \
echo \" $USER $HASHED_PASS\" >> Caddyfile && \
echo \" }\" >> Caddyfile && \
echo \" reverse_proxy localhost:8080\" >> Caddyfile && \
echo \"}\" >> Caddyfile && \
# 动态计算密钥并后台启动 API 引擎 \
export ENCRYPTION_KEY=$(node -e \"console.log(require('crypto').randomBytes(32).toString('hex'))\") && \
node server/dist/index.js & \
# 前台启动密码锁守护进程 \
caddy run --config Caddyfile\"] |