File size: 1,952 Bytes
47781dc
 
 
3fbe02c
47781dc
 
 
 
 
 
 
3fbe02c
47781dc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3fbe02c
47781dc
 
 
 
 
 
 
 
 
 
 
 
3fbe02c
 
47781dc
 
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
48
49
50
51
52
53
54
# New API 中转 —— Hugging Face Spaces (Docker SDK)
# 直接从 new-api 官方 GitHub 源码构建,不依赖 Docker Hub 预构建镜像。
# 构建步骤复刻自官方 Dockerfile(前端 bun,后端 go)。

# ---------- 0. 拉取源码 ----------
FROM alpine/git AS source
# 可改成具体 tag(如 v0.x.x)来锁版本,默认拉取最新 main 分支
ARG NEW_API_REF=main
WORKDIR /src
RUN git clone --depth 1 --branch ${NEW_API_REF} https://github.com/QuantumNous/new-api.git . \
    && rm -rf .git

# ---------- 1. 前端构建 (default + classic) ----------
FROM oven/bun:1 AS builder
WORKDIR /build
COPY --from=source /src/ ./
WORKDIR /build/web
RUN bun install --frozen-lockfile
RUN cd default \
    && DISABLE_ESLINT_PLUGIN='true' VITE_REACT_APP_VERSION=$(cat /build/VERSION) bun run build
RUN cd classic \
    && VITE_REACT_APP_VERSION=$(cat /build/VERSION) bun run build

# ---------- 2. 后端构建 (Go) ----------
FROM golang:1.26.1-alpine AS builder2
ENV GO111MODULE=on CGO_ENABLED=0
ARG TARGETOS
ARG TARGETARCH
ENV GOOS=${TARGETOS:-linux} GOARCH=${TARGETARCH:-amd64}
ENV GOEXPERIMENT=greenteagc
WORKDIR /build
COPY --from=source /src/ ./
COPY --from=builder /build/web/default/dist ./web/default/dist
COPY --from=builder /build/web/classic/dist ./web/classic/dist
RUN go mod download
RUN go build -ldflags "-s -w -X 'github.com/QuantumNous/new-api/common.Version=$(cat VERSION)'" -o new-api

# ---------- 3. 运行镜像 ----------
FROM debian:bookworm-slim
RUN apt-get update \
    && apt-get install -y --no-install-recommends ca-certificates tzdata libasan8 wget \
    && rm -rf /var/lib/apt/lists/* \
    && update-ca-certificates
COPY --from=builder2 /build/new-api /

# Hugging Face Spaces 通过 app_port(=7860) 转发流量
ENV PORT=7860
# SQLite 落到 HF 持久化存储挂载点 /data(Space 设置里开 Persistent storage)
ENV SQLITE_PATH=/data/new-api.db

EXPOSE 7860
WORKDIR /data
ENTRYPOINT ["/new-api"]