Spaces:
Running
Running
| # ---------------- 构建阶段 ---------------- | |
| FROM golang:1.24-alpine AS builder | |
| # 设置工作目录 | |
| WORKDIR /app | |
| # 安装 git 和 sed (用于拉取代码和修改端口) | |
| RUN apk add --no-cache git sed | |
| # 1. 直接拉取代码 (这里使用 CACHEBUST 技巧,见下文解释) | |
| # 只要更改这行 arg 的值,Docker 就会重新拉取最新代码,而不是用缓存 | |
| ARG CACHEBUST=1 | |
| RUN git clone https://github.com/wujunwei928/parse-video.git . | |
| # 2. 【关键】修改端口 8080 -> 7860 | |
| # Hugging Face 强制要求 7860,原项目是 8080 | |
| # 这一步必须要在 clone 之后做 | |
| RUN sed -i 's/8080/7860/g' main.go | |
| # 3. 下载依赖并编译 | |
| RUN go mod download | |
| RUN go build -o parse-video main.go | |
| # ---------------- 运行阶段 ---------------- | |
| FROM alpine:latest | |
| WORKDIR /app | |
| # 安装基础库 | |
| RUN apk add --no-cache ca-certificates tzdata | |
| # 设置用户 (Hugging Face 安全要求) | |
| RUN adduser -D -u 1000 user | |
| USER 1000 | |
| # 4. 从构建层复制编译好的程序 | |
| COPY --from=builder --chown=1000:1000 /app/parse-video . | |
| # 如果项目有配置文件或静态资源文件夹(如 conf, web, templates),需要在这里一并复制 | |
| # 这是一个保险操作,把整个目录结构里非代码文件尝试复制过来(视项目结构而定) | |
| # 这里只演示复制 binary,通常足够。如果报错缺文件,需添加 COPY 指令。 | |
| # 暴露端口 | |
| EXPOSE 7860 | |
| # 启动 | |
| CMD ["./parse-video"] |