linjinpeng commited on
Commit
8c8a4ab
·
verified ·
1 Parent(s): dfbcd79

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +13 -51
Dockerfile CHANGED
@@ -1,101 +1,67 @@
1
  # syntax=docker/dockerfile:1.6
2
 
3
  ############################
4
- # 1) Builder: Go + Node/Yarn
5
  ############################
6
- FROM golang:1.25.0-alpine AS builder
 
7
 
8
- # 可选:如果你在 HF 上网络抽风,可以在 build 时覆盖这些参数
9
- # docker build --build-arg GOPROXY=... --build-arg YARN_REGISTRY=...
10
  ARG GOPROXY=https://proxy.golang.org,direct
11
  ARG YARN_REGISTRY=https://registry.npmjs.org
12
  ARG GIT_CLONE_RETRIES=5
13
  ARG YARN_RETRIES=3
14
 
15
- # Go modules 代理
16
  ENV GOPROXY=${GOPROXY}
17
 
18
- # 安装构建依赖:
19
- # - git: 拉代码
20
- # - nodejs/npm/yarn: 构建前端
21
- # - python3/make/g++: 解决 node-gyp / native addon 编译(很常见)
22
- # - ca-certificates: HTTPS 必需
23
  RUN set -eux; \
24
  apk add --no-cache \
25
- git \
26
- nodejs \
27
- npm \
28
- yarn \
29
- python3 \
30
- make \
31
- g++ \
32
- ca-certificates \
33
- tzdata \
34
- bash
35
 
36
  WORKDIR /app
37
 
38
- # 打印版本信息,方便 HF 构建日志里第一眼看到环境是否满足要求
39
  RUN set -eux; \
40
  echo "==== Versions ===="; \
41
- go version; \
42
- node -v; \
43
- npm -v; \
44
- yarn -v; \
45
- git --version; \
46
  echo "=================="
47
 
48
- # 1) 克隆源码(带重试,网络不稳时更稳)
49
  RUN set -eux; \
50
  for i in $(seq 1 "${GIT_CLONE_RETRIES}"); do \
51
  echo ">>> git clone attempt ${i}/${GIT_CLONE_RETRIES}"; \
52
  rm -rf /app/*; \
53
- if git clone --depth=1 https://github.com/deanxv/done-hub.git .; then \
54
- break; \
55
- fi; \
56
- if [ "$i" -eq "${GIT_CLONE_RETRIES}" ]; then \
57
- echo "!!! git clone failed after ${GIT_CLONE_RETRIES} attempts"; \
58
- exit 1; \
59
- fi; \
60
  sleep 5; \
61
  done
62
 
63
- # 2) 前端依赖安装(单独一步:失败就能看到是 install 挂了)
64
  RUN set -eux; \
65
  cd web; \
66
  yarn config set registry "${YARN_REGISTRY}"; \
67
  yarn config set network-timeout 100000; \
68
- echo ">>> yarn install (with retries=${YARN_RETRIES})"; \
69
  for i in $(seq 1 "${YARN_RETRIES}"); do \
70
  echo ">>> yarn install attempt ${i}/${YARN_RETRIES}"; \
71
- if yarn install --frozen-lockfile; then \
72
- break; \
73
- fi; \
74
- if [ "$i" -eq "${YARN_RETRIES}" ]; then \
75
- echo "!!! yarn install failed after ${YARN_RETRIES} attempts"; \
76
- exit 1; \
77
- fi; \
78
  sleep 3; \
79
  done
80
 
81
- # 3) 前端构建(单独一步:失败就能看到是 build 挂了)
82
  RUN set -eux; \
83
  cd web; \
84
  echo ">>> yarn build"; \
85
  yarn build
86
 
87
- # 4) Go 依赖下载(单独一步:失败就能看到是 go mod 下载挂了)
88
  RUN set -eux; \
89
  echo ">>> go mod download"; \
90
  go mod download
91
 
92
- # 5) Go 编译(单独一步:失败就能看到编译报错)
93
  RUN set -eux; \
94
  echo ">>> go build"; \
95
  go build -ldflags "-s -w" -o done-hub
96
 
97
  ############################
98
- # 2) Runtime: Minimal Alpine
99
  ############################
100
  FROM alpine:latest
101
 
@@ -104,11 +70,7 @@ RUN set -eux; \
104
  update-ca-certificates
105
 
106
  WORKDIR /data
107
-
108
- # 只拷贝最终二进制
109
  COPY --from=builder /app/done-hub /done-hub
110
 
111
- # HF Spaces 通常默认用 7860(你项目如果只能跑 3000,也没问题,只是运行时要匹配 HF 的端口配置)
112
  EXPOSE 3000
113
-
114
  ENTRYPOINT ["/done-hub"]
 
1
  # syntax=docker/dockerfile:1.6
2
 
3
  ############################
4
+ # 1) Builder
5
  ############################
6
+ FROM golang:1.25.5-alpine AS builder
7
+ # 如果 1.25.5-alpine 不存在,就改成存在的更高版本,例如 1.26-alpine
8
 
 
 
9
  ARG GOPROXY=https://proxy.golang.org,direct
10
  ARG YARN_REGISTRY=https://registry.npmjs.org
11
  ARG GIT_CLONE_RETRIES=5
12
  ARG YARN_RETRIES=3
13
 
 
14
  ENV GOPROXY=${GOPROXY}
15
 
 
 
 
 
 
16
  RUN set -eux; \
17
  apk add --no-cache \
18
+ git nodejs npm yarn \
19
+ python3 make g++ \
20
+ ca-certificates tzdata bash
 
 
 
 
 
 
 
21
 
22
  WORKDIR /app
23
 
 
24
  RUN set -eux; \
25
  echo "==== Versions ===="; \
26
+ go version; node -v; npm -v; yarn -v; git --version; \
 
 
 
 
27
  echo "=================="
28
 
 
29
  RUN set -eux; \
30
  for i in $(seq 1 "${GIT_CLONE_RETRIES}"); do \
31
  echo ">>> git clone attempt ${i}/${GIT_CLONE_RETRIES}"; \
32
  rm -rf /app/*; \
33
+ if git clone --depth=1 https://github.com/deanxv/done-hub.git .; then break; fi; \
34
+ if [ "$i" -eq "${GIT_CLONE_RETRIES}" ]; then echo "!!! git clone failed"; exit 1; fi; \
 
 
 
 
 
35
  sleep 5; \
36
  done
37
 
 
38
  RUN set -eux; \
39
  cd web; \
40
  yarn config set registry "${YARN_REGISTRY}"; \
41
  yarn config set network-timeout 100000; \
42
+ echo ">>> yarn install (retries=${YARN_RETRIES})"; \
43
  for i in $(seq 1 "${YARN_RETRIES}"); do \
44
  echo ">>> yarn install attempt ${i}/${YARN_RETRIES}"; \
45
+ if yarn install --frozen-lockfile; then break; fi; \
46
+ if [ "$i" -eq "${YARN_RETRIES}" ]; then echo "!!! yarn install failed"; exit 1; fi; \
 
 
 
 
 
47
  sleep 3; \
48
  done
49
 
 
50
  RUN set -eux; \
51
  cd web; \
52
  echo ">>> yarn build"; \
53
  yarn build
54
 
 
55
  RUN set -eux; \
56
  echo ">>> go mod download"; \
57
  go mod download
58
 
 
59
  RUN set -eux; \
60
  echo ">>> go build"; \
61
  go build -ldflags "-s -w" -o done-hub
62
 
63
  ############################
64
+ # 2) Runtime
65
  ############################
66
  FROM alpine:latest
67
 
 
70
  update-ca-certificates
71
 
72
  WORKDIR /data
 
 
73
  COPY --from=builder /app/done-hub /done-hub
74
 
 
75
  EXPOSE 3000
 
76
  ENTRYPOINT ["/done-hub"]