lucklca commited on
Commit
98c45c6
·
verified ·
1 Parent(s): dc1961b

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +11 -72
Dockerfile CHANGED
@@ -1,79 +1,18 @@
1
- # ==========================================
2
- # 阶段 1: 构建前端 WebUI
3
- # ==========================================
4
- FROM node:24 AS webui-builder
5
- WORKDIR /app/webui
6
- COPY webui/package.json webui/package-lock.json ./
7
- RUN npm ci
8
- COPY webui ./
9
- RUN npm run build
10
 
11
- # ==========================================
12
- # 阶段 2: 构建 Go 后端
13
- # ==========================================
14
- FROM golang:1.26 AS go-builder
15
- WORKDIR /app
16
- ARG TARGETOS
17
- ARG TARGETARCH
18
- ARG BUILD_VERSION
19
- COPY go.mod go.sum* ./
20
- RUN go mod download
21
- COPY . .
22
- RUN set -eux; \
23
- GOOS="${TARGETOS:-$(go env GOOS)}"; \
24
- GOARCH="${TARGETARCH:-$(go env GOARCH)}"; \
25
- BUILD_VERSION_RESOLVED="${BUILD_VERSION:-}"; \
26
- if [ -z "${BUILD_VERSION_RESOLVED}" ] && [ -f VERSION ]; then BUILD_VERSION_RESOLVED="$(cat VERSION | tr -d "[:space:]")"; fi; \
27
- CGO_ENABLED=0 GOOS="${GOOS}" GOARCH="${GOARCH}" go build -ldflags="-s -w -X ds2api/internal/version.BuildVersion=${BUILD_VERSION_RESOLVED}" -o /out/ds2api ./cmd
28
 
29
- # ==========================================
30
- # 阶段 3: 准备 Busybox 工具
31
- # ==========================================
32
- FROM busybox:1.36.1-musl AS busybox-tools
33
-
34
- # ==========================================
35
- # 阶段 4: 运行时基础镜像 (HF 适配核心区)
36
- # ==========================================
37
- FROM debian:bookworm-slim AS runtime-base
38
- WORKDIR /app
39
-
40
- # 安装必要的 SSL 证书(连接外部 API 必需)
41
- RUN apt-get update \
42
- && apt-get install -y --no-install-recommends ca-certificates \
43
- && rm -rf /var/lib/apt/lists/*
44
-
45
- COPY --from=busybox-tools /bin/busybox /usr/local/bin/busybox
46
-
47
- # ---------------------------------------------------------
48
- # [HF 必选项] 1. 创建 UID 为 1000 的非 root 用户并赋予工作目录权限
49
- # ---------------------------------------------------------
50
- RUN useradd -m -u 1000 user \
51
- && chown -R user:user /app
52
-
53
- # ---------------------------------------------------------
54
- # [HF 必选项] 2. 强制指定监听端口为 7860
55
- # ---------------------------------------------------------
56
  ENV DS2API_HOST_PORT=7860
57
  EXPOSE 7860
58
 
59
- # ==========================================
60
- # 阶段 5: 从源码组装并运行最终镜像
61
- # ==========================================
62
- FROM runtime-base AS final
63
-
64
- # ---------------------------------------------------------
65
- # [HF 必选项] 3. 切换到非 root 用户运行
66
- # ---------------------------------------------------------
67
- USER user
68
-
69
- # 复制后端二进制文件(注意 --chown 赋权)
70
- COPY --from=go-builder --chown=user:user /out/ds2api /usr/local/bin/ds2api
71
-
72
- # 复制配置文件模板
73
- COPY --from=go-builder --chown=user:user /app/config.example.json /app/config.example.json
74
 
75
- # 复制前端编译产物(管理后台静态资源)
76
- COPY --from=webui-builder --chown=user:user /app/static/admin /app/static/admin
77
 
78
- # 启动命令
79
- CMD ["/usr/local/bin/ds2api"]
 
1
+ # 1. 直接使用作者预编译好的官方镜像,跳过所有 npm 和 go 编译过程!
2
+ FROM ghcr.io/cjackhwang/ds2api:latest
 
 
 
 
 
 
 
3
 
4
+ # 2. 临时切换到 root 来修改权限
5
+ USER root
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6
 
7
+ # 3. 适配 Hugging Face 端口限制
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8
  ENV DS2API_HOST_PORT=7860
9
  EXPOSE 7860
10
 
11
+ # 4. 适配 Hugging Face 权限要求 (以 UID 1000 运行)
12
+ # 确保程序运行时有权限写入日志或读取配置
13
+ RUN mkdir -p /app && chown -R 1000:1000 /app
 
 
 
 
 
 
 
 
 
 
 
 
14
 
15
+ # 5. 切换到非 root 用户
16
+ USER 1000
17
 
18
+ # 启动命令会自动继承官方镜像的配置,无需重写 CMD