Spaces:
Sleeping
Sleeping
| # --- Stage 1: Build Go Application --- | |
| FROM golang:1.21-alpine AS build | |
| # Alpine 需要这些依赖来编译 | |
| RUN apk add --no-cache build-base | |
| WORKDIR /app | |
| # 复制 Go 源代码 | |
| COPY *.go ./ | |
| # 编译 Go 应用 | |
| RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w" -o /main main.go | |
| # --- Stage 2: Final Runtime Image --- | |
| FROM alpine:latest | |
| RUN apk add --no-cache python3 py3-pip curl tar gzip bash jq ca-certificates | |
| RUN adduser -D -u 1000 user | |
| RUN mkdir -p /home/user/data && chown -R user:user /home/user/data | |
| ENV HOME=/home/user \ | |
| PATH=/home/user/.local/bin:$PATH | |
| WORKDIR $HOME/app | |
| ENV VIRTUAL_ENV=$HOME/venv | |
| RUN python3 -m venv $VIRTUAL_ENV | |
| ENV PATH="$VIRTUAL_ENV/bin:$PATH" | |
| # 安装系统依赖 | |
| # 安装 Python 依赖 (!!! 确认你的脚本用的是 webdav3 !!!) | |
| # 如果你用了我上次给的脚本,应该是 webdav3 | |
| RUN pip install --no-cache-dir requests webdavclient3 | |
| # 如果你确定用的是 webdavclient3,那就改成 webdavclient3,但要确保脚本也对应修改 | |
| # 从构建阶段复制编译好的 Go 应用 | |
| COPY --from=build /main $HOME/app/main | |
| # 复制后台同步脚本和入口点脚本 | |
| COPY --chown=user sync_data.sh $HOME/app/sync_data.sh | |
| COPY --chown=user entrypoint.sh $HOME/app/entrypoint.sh | |
| # 创建用于存储文件的目录 | |
| RUN mkdir $HOME/app/files | |
| # 赋予脚本执行权限 (Go 应用也需要) | |
| RUN chmod +x $HOME/app/main $HOME/app/sync_data.sh $HOME/app/entrypoint.sh | |
| RUN chown -R user:user /home/user | |
| # 切换到非 root 用户 | |
| USER user | |
| # 端口暴露 (Hugging Face 会处理) | |
| EXPOSE 3456 | |
| # 设置入口点脚本 | |
| ENTRYPOINT ["/home/user/app/entrypoint.sh"] | |
| # CMD ["/app/main"] # 如果 entrypoint.sh 负责启动 sync_data.sh,可以让 CMD 启动 Go 应用 | |
| # 或者 entrypoint.sh 负责启动所有进程 | |