diff --git a/Dockerfile.ffmpeg b/Dockerfile.ffmpeg new file mode 100644 index 0000000..2e99e5f --- /dev/null +++ b/Dockerfile.ffmpeg @@ -0,0 +1,39 @@ +# 阶段1: 构建 +FROM golang:alpine AS builder + +RUN apk add --no-cache git ca-certificates tzdata + +ENV TZ=Asia/Shanghai +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone + +ENV GO111MODULE=on +ENV GOPROXY=https://goproxy.cn,direct +ENV CGO_ENABLED=0 +ENV GOTOOLCHAIN=auto +WORKDIR /build + +COPY . . + +RUN go mod download && go mod tidy + +RUN go build -ldflags="-s -w" -o main ./main.go + + +# 阶段2: 运行时(预装 FFmpeg) +FROM alpine:3.19 + +RUN apk add --no-cache ca-certificates tzdata ffmpeg + +ENV TZ=Asia/Shanghai +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone + +WORKDIR /app + +# 复制二进制和运行时必需的文件 +COPY --from=builder /build/main . +COPY --from=builder /build/config.yml . +COPY --from=builder /build/scripts ./scripts + +EXPOSE 3010 + +CMD ["./main"] diff --git a/Dockerfile.hyperframes b/Dockerfile.hyperframes new file mode 100644 index 0000000..92c362a --- /dev/null +++ b/Dockerfile.hyperframes @@ -0,0 +1,44 @@ +# 阶段1: 构建 +FROM golang:alpine AS builder + +RUN apk add --no-cache git ca-certificates tzdata + +ENV TZ=Asia/Shanghai +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone + +ENV GO111MODULE=on +ENV GOPROXY=https://goproxy.cn,direct +ENV CGO_ENABLED=0 +ENV GOTOOLCHAIN=auto +WORKDIR /build + +COPY . . + +RUN go mod download && go mod tidy + +RUN go build -ldflags="-s -w" -o main ./main.go + + +# 阶段2: 运行时(预装 FFmpeg + Node.js + HyperFrames) +FROM alpine:3.19 + +# nodejs/npm 在 community 仓库,需启用 +RUN echo "https://dl-cdn.alpinelinux.org/alpine/v3.19/community" >> /etc/apk/repositories \ + && apk add --no-cache ca-certificates tzdata ffmpeg nodejs npm + +ENV TZ=Asia/Shanghai +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone + +# 预装 HyperFrames(全局安装) +RUN npm install -g hyperframes + +WORKDIR /app + +# 复制二进制和运行时必需的文件 +COPY --from=builder /build/main . +COPY --from=builder /build/config.yml . +COPY --from=builder /build/scripts ./scripts + +EXPOSE 3010 + +CMD ["./main"] diff --git a/Dockerfile.scenedetect b/Dockerfile.scenedetect new file mode 100644 index 0000000..04fb078 --- /dev/null +++ b/Dockerfile.scenedetect @@ -0,0 +1,47 @@ +# 阶段1: 构建 +FROM golang:alpine AS builder + +RUN apk add --no-cache git ca-certificates tzdata + +ENV TZ=Asia/Shanghai +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone + +ENV GO111MODULE=on +ENV GOPROXY=https://goproxy.cn,direct +ENV CGO_ENABLED=0 +ENV GOTOOLCHAIN=auto +WORKDIR /build + +COPY . . + +RUN go mod download && go mod tidy + +RUN go build -ldflags="-s -w" -o main ./main.go + + +# 阶段2: 运行时(预装 FFmpeg + Python3 + PySceneDetect) +FROM alpine:3.19 + +RUN apk add --no-cache ca-certificates tzdata ffmpeg python3 py3-pip \ + gcc musl-dev python3-dev linux-headers + +ENV TZ=Asia/Shanghai +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone + +# 预装 PySceneDetect(opencv-headless 无需 GUI 依赖) +# 使用 --break-system-packages 兼容 PEP 668 限制的 pip 版本 +RUN pip3 install --break-system-packages scenedetect[opencv-headless,ffmpeg] + +# 验证安装 +RUN python3 -c "import scenedetect; print(f'scenedetect {scenedetect.__version__} installed')" + +WORKDIR /app + +# 复制二进制和运行时必需的文件 +COPY --from=builder /build/main . +COPY --from=builder /build/config.yml . +COPY --from=builder /build/scripts ./scripts + +EXPOSE 3010 + +CMD ["./main"]