Spaces:
Sleeping
Sleeping
Update Dockerfile
Browse files- Dockerfile +13 -51
Dockerfile
CHANGED
|
@@ -1,101 +1,67 @@
|
|
| 1 |
# syntax=docker/dockerfile:1.6
|
| 2 |
|
| 3 |
############################
|
| 4 |
-
# 1) Builder
|
| 5 |
############################
|
| 6 |
-
FROM golang:1.25.
|
|
|
|
| 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 |
-
|
| 27 |
-
|
| 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 |
-
|
| 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 (
|
| 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 |
-
|
| 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
|
| 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"]
|