# --- 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 负责启动所有进程