jxdn123 commited on
Commit
c17d19d
·
verified ·
1 Parent(s): 72c241b

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +23 -9
Dockerfile CHANGED
@@ -5,24 +5,31 @@ ARG REPO_URL=https://github.com/tbphp/gpt-load.git
5
  # 如需可复现构建,可把 main 改为固定 tag 或 commit
6
  ARG REPO_REF=main
7
  WORKDIR /src
8
- RUN git clone --depth=1 --branch "${REPO_REF}" "${REPO_URL}" .
 
 
 
 
 
 
9
 
10
  # ---------- 1) 构建前端 ----------
11
  FROM node:20-alpine3.20 AS web-builder
12
- ARG VERSION=1.0.0
13
  WORKDIR /build/web
14
 
15
  # 利用缓存:先依赖清单后源码
16
  COPY --from=src /src/web/package*.json ./
17
  RUN npm ci
18
  COPY --from=src /src/web ./
19
- # Vite 只认编译期变量的 VITE_ 前缀
20
- ENV VITE_VERSION=$VERSION
21
- RUN npm run build
 
 
 
22
 
23
  # ---------- 2) 构建后端(Go 1.23) ----------
24
  FROM golang:1.23-alpine3.20 AS go-builder
25
- ARG VERSION=1.0.0
26
  ENV GO111MODULE=on \
27
  CGO_ENABLED=0 \
28
  GOOS=linux \
@@ -38,15 +45,21 @@ RUN go mod download
38
  COPY --from=src /src ./
39
  # 注入前端产物
40
  COPY --from=web-builder /build/web/dist ./web/dist
 
 
41
 
42
- # 更小二进制 + 注入版本
43
- RUN go build -trimpath -ldflags "-s -w -X gpt-load/internal/version.Version=${VERSION}" -o gpt-load
 
 
 
 
 
44
 
45
  # ---------- 3) 运行阶段 ----------
46
  FROM alpine:3.20
47
 
48
  WORKDIR /app
49
- # 不再安装 socat
50
  RUN apk add --no-cache ca-certificates tzdata && update-ca-certificates
51
 
52
  COPY --from=go-builder /build/gpt-load /app/gpt-load
@@ -60,6 +73,7 @@ RUN mkdir -p /app/data \
60
 
61
  ENV DATABASE_DRIVER=sqlite
62
  ENV DATABASE_DSN=/app/data/gpt-load.db
 
63
  ENV PORT=7860
64
  EXPOSE 7860
65
 
 
5
  # 如需可复现构建,可把 main 改为固定 tag 或 commit
6
  ARG REPO_REF=main
7
  WORKDIR /src
8
+ # 为了能获取到全部 tag,这里不做浅克隆
9
+ RUN git clone --branch "${REPO_REF}" "${REPO_URL}" . \
10
+ && git fetch --tags --force || true \
11
+ # 取最新语义化 tag(如 v1.3.1),没有 tag 就用短 commit
12
+ && LATEST_TAG="$(git tag -l --sort=-v:refname | head -n1)" \
13
+ && if [ -n "$LATEST_TAG" ]; then VERSION="${LATEST_TAG#v}"; else VERSION="$(git rev-parse --short HEAD)"; fi \
14
+ && printf "%s" "$VERSION" > /version.txt
15
 
16
  # ---------- 1) 构建前端 ----------
17
  FROM node:20-alpine3.20 AS web-builder
 
18
  WORKDIR /build/web
19
 
20
  # 利用缓存:先依赖清单后源码
21
  COPY --from=src /src/web/package*.json ./
22
  RUN npm ci
23
  COPY --from=src /src/web ./
24
+
25
+ # 从 src 阶段带入版本号文件
26
+ COPY --from=src /version.txt ./VERSION
27
+
28
+ # Vite 只认编译期变量的 VITE_ 前缀:用一次性环境变量注入
29
+ RUN VITE_VERSION="$(cat VERSION)" npm run build
30
 
31
  # ---------- 2) 构建后端(Go 1.23) ----------
32
  FROM golang:1.23-alpine3.20 AS go-builder
 
33
  ENV GO111MODULE=on \
34
  CGO_ENABLED=0 \
35
  GOOS=linux \
 
45
  COPY --from=src /src ./
46
  # 注入前端产物
47
  COPY --from=web-builder /build/web/dist ./web/dist
48
+ # 带入版本号
49
+ COPY --from=src /version.txt ./VERSION
50
 
51
+ # 更小二进制 + 正确注入版本(自动读取模块名)
52
+ RUN MODULE="$(grep ^module go.mod | awk '{print $2}')" \
53
+ && VERSION="$(cat VERSION)" \
54
+ && echo ">> building ${MODULE} version=${VERSION}" \
55
+ && go build -trimpath \
56
+ -ldflags "-s -w -X ${MODULE}/internal/version.Version=${VERSION}" \
57
+ -o gpt-load .
58
 
59
  # ---------- 3) 运行阶段 ----------
60
  FROM alpine:3.20
61
 
62
  WORKDIR /app
 
63
  RUN apk add --no-cache ca-certificates tzdata && update-ca-certificates
64
 
65
  COPY --from=go-builder /build/gpt-load /app/gpt-load
 
73
 
74
  ENV DATABASE_DRIVER=sqlite
75
  ENV DATABASE_DSN=/app/data/gpt-load.db
76
+ # Hugging Face Spaces 会注入 PORT;这里保留默认值以便本地运行
77
  ENV PORT=7860
78
  EXPOSE 7860
79