# Hugging Face Spaces Dockerfile for vd project (优化版本) # 基于 Python 3.10 slim 镜像 FROM python:3.10-slim # 设置元数据 LABEL maintainer="opq007" LABEL description="VD - 视频处理服务" LABEL version="3.0.0" # 设置工作目录 WORKDIR /app # 设置环境变量 # 注意:以下密钥相关的环境变量可以在 Hugging Face Spaces 设置中配置 # 这样可以避免在代码中硬编码敏感信息 # # 认证密钥配置(生产环境必须在 HF Spaces 设置中修改): # - API_TOKEN: API 认证令牌 # - SECRET_KEY: JWT 加密密钥 # # 第三方服务密钥: # - ZHIPU_API_KEY: 智谱 AI API 密钥 ENV PYTHONUNBUFFERED=1 \ DEBIAN_FRONTEND=noninteractive \ PYTHONDONTWRITEBYTECODE=1 \ PIP_NO_CACHE_DIR=1 \ PIP_DISABLE_PIP_VERSION_CHECK=1 \ PORT=7860 \ HOST=0.0.0.0 \ ENABLE_GRADIO_UI=true \ FW_MODEL=small \ FW_DEVICE=cpu \ FW_COMPUTE=int8 \ VOX_ONNX_DEVICE=cpu \ VOX_ONNX_OPTIMIZE=1 \ VOX_ONNX_DTYPE=fp32 \ LOG_LEVEL=INFO \ MODELSCOPE_CACHE=/app/models/modelscope_cache # 安装系统依赖(最小化安装) RUN apt-get update && apt-get install -y --no-install-recommends \ ffmpeg \ aria2 \ p7zip-full \ git \ curl \ ca-certificates \ && rm -rf /var/lib/apt/lists/* \ && apt-get clean # 设置 GitHub 仓库地址(可通过环境变量覆盖) ARG REPO_URL=https://github.com/opq007/vd.git ARG REPO_BRANCH=main # 升级 pip 并安装 Python 依赖(分批安装以优化构建缓存) RUN pip install --no-cache-dir --upgrade pip setuptools wheel && \ pip install --no-cache-dir --default-timeout=100 \ "faster-whisper" \ "fastapi" \ "uvicorn[standard]" \ "python-multipart" \ "aiofiles" \ "PyJWT" \ "gradio" \ "requests" && \ pip install --no-cache-dir --default-timeout=100 \ "playwright>=1.40.0" \ "opencv-python-headless" \ "numpy" \ "torch" \ "Pillow>=10.0.0" \ "soundfile" \ "transformers>=4.30.0" \ "onnxruntime" \ "modelscope" && \ pip install --no-cache-dir --default-timeout=100 \ "sentencepiece" \ "protobuf" \ "accelerate" \ "einops" \ "omegaconf" \ "scipy" \ "librosa" # 克隆项目代码(自动获取最新版本) RUN echo "Cloning project from ${REPO_URL} (branch: ${REPO_BRANCH})..." && \ git clone --depth 1 --branch ${REPO_BRANCH} ${REPO_URL} /tmp/vd && \ cp -r /tmp/vd/* . && \ cp -r /tmp/vd/.* . 2>/dev/null || true && \ rm -rf /tmp/vd && \ echo "Project cloned successfully" # 创建必要的目录 RUN mkdir -p models uploads output debug logs && \ chmod -R 755 models uploads output debug logs # 下载模型文件(使用 aria2 加速,添加重试机制) # 1. 下载 RMBG-1.4 模型(背景移除) RUN echo "Downloading RMBG-1.4 model..." && \ aria2c -x 16 -s 16 --max-tries=5 --retry-wait=5 \ -d models/ -o rmbg-1.4.onnx \ https://modelscope.cn/models/AI-ModelScope/RMBG-1.4/resolve/master/onnx/model.onnx || \ (echo "RMBG-1.4 download failed, retrying..." && \ aria2c -x 16 -s 16 --max-tries=10 --retry-wait=10 \ -d models/ -o rmbg-1.4.onnx \ https://modelscope.cn/models/AI-ModelScope/RMBG-1.4/resolve/master/onnx/model.onnx) # 2. 下载 faster-whisper-small 模型 RUN echo "Downloading faster-whisper-small model..." && \ modelscope download --model angelala00/faster-whisper-small --local_dir ./models/small --revision master || \ (echo "faster-whisper download failed, retrying..." && \ modelscope download --model angelala00/faster-whisper-small --local_dir ./models/small --revision master) # 3. 下载 VoxCPM ONNX 模型 RUN echo "Downloading VoxCPM ONNX model..." && \ aria2c -x 16 -s 16 --max-tries=5 --retry-wait=5 \ -d models/ -o onnx_models_v15.zip \ https://modelscope.cn/models/opqtest007/vox/resolve/master/onnx_models_v15.zip.ckpt || \ (echo "VoxCPM download failed, retrying..." && \ aria2c -x 16 -s 16 --max-tries=10 --retry-wait=10 \ -d models/ -o onnx_models_v15.zip \ https://modelscope.cn/models/opqtest007/vox/resolve/master/onnx_models_v15.zip.ckpt) && \ cd models/ && \ 7z x onnx_models_v15.zip -p -y && \ rm onnx_models_v15.zip && \ cd .. # 4. 下载 VoxCPM 参考音频数据库 RUN echo "Downloading VoxCPM reference database..." && \ aria2c -x 16 -s 16 --max-tries=5 --retry-wait=5 \ -d models/ -o voxcpm_ref.db \ https://modelscope.cn/models/opqtest007/vox/resolve/master/voxcpm_ref.db || \ (echo "VoxCPM reference database download failed, retrying..." && \ aria2c -x 16 -s 16 --max-tries=10 --retry-wait=10 \ -d models/ -o voxcpm_ref.db \ https://modelscope.cn/models/opqtest007/vox/resolve/master/voxcpm_ref.db) # 验证模型文件 RUN echo "Verifying model files..." && \ ls -lh models/ && \ ls -lh models/small/ 2>/dev/null || echo "small model not found" && \ ls -lh models/onnx_models_v15/ 2>/dev/null || echo "onnx_models_v15 not found" && \ ls -lh models/voxcpm_ref.db 2>/dev/null || echo "voxcpm_ref.db not found" # 清理 pip 缓存和临时文件 RUN rm -rf /tmp/* /root/.cache/pip /root/.local/share/pip # 暴露端口 EXPOSE 7860 # 创建非 root 用户(安全最佳实践) RUN useradd -m -u 1000 appuser && \ chown -R appuser:appuser /app # 切换到非 root 用户 USER appuser # 启动命令(使用 uvicorn 的生产配置) # 注意:Hugging Face Spaces 会自动检测服务是否启动 CMD ["uvicorn", "app:app", \ "--host", "0.0.0.0", \ "--port", "7860", \ "--workers", "1", \ "--log-level", "info", \ "--access-log", \ "--no-use-colors", \ "--timeout-keep-alive", "300"]