lucklca commited on
Commit
dc1961b
·
verified ·
1 Parent(s): 9ef2d6e

Create Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +79 -0
Dockerfile ADDED
@@ -0,0 +1,79 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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"]