jdaaaa commited on
Commit
6bc8a3d
·
verified ·
1 Parent(s): 72aab68

Create Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +167 -0
Dockerfile ADDED
@@ -0,0 +1,167 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Hugging Face Spaces Dockerfile for vd project (优化版本)
2
+ # 基于 Python 3.10 slim 镜像
3
+ FROM python:3.10-slim
4
+
5
+ # 设置元数据
6
+ LABEL maintainer="opq007"
7
+ LABEL description="VD - 视频处理服务"
8
+ LABEL version="3.0.0"
9
+
10
+ # 设置工作目录
11
+ WORKDIR /app
12
+
13
+ # 设置环境变量
14
+ # 注意:以下密钥相关的环境变量可以在 Hugging Face Spaces 设置中配置
15
+ # 这样可以避免在代码中硬编码敏感信息
16
+ #
17
+ # 认证密钥配置(生产环境必须在 HF Spaces 设置中修改):
18
+ # - API_TOKEN: API 认证令牌
19
+ # - SECRET_KEY: JWT 加密密钥
20
+ #
21
+ # 第三方服务密钥:
22
+ # - ZHIPU_API_KEY: 智谱 AI API 密钥
23
+ ENV PYTHONUNBUFFERED=1 \
24
+ DEBIAN_FRONTEND=noninteractive \
25
+ PYTHONDONTWRITEBYTECODE=1 \
26
+ PIP_NO_CACHE_DIR=1 \
27
+ PIP_DISABLE_PIP_VERSION_CHECK=1 \
28
+ PORT=7860 \
29
+ HOST=0.0.0.0 \
30
+ ENABLE_GRADIO_UI=true \
31
+ FW_MODEL=small \
32
+ FW_DEVICE=cpu \
33
+ FW_COMPUTE=int8 \
34
+ VOX_ONNX_DEVICE=cpu \
35
+ VOX_ONNX_OPTIMIZE=1 \
36
+ VOX_ONNX_DTYPE=fp32 \
37
+ LOG_LEVEL=INFO \
38
+ MODELSCOPE_CACHE=/app/models/modelscope_cache
39
+
40
+ # 安装系统依赖(最小化安装)
41
+ RUN apt-get update && apt-get install -y --no-install-recommends \
42
+ ffmpeg \
43
+ aria2 \
44
+ p7zip-full \
45
+ git \
46
+ curl \
47
+ ca-certificates \
48
+ && rm -rf /var/lib/apt/lists/* \
49
+ && apt-get clean
50
+
51
+ # 设置 GitHub 仓库地址(可通过环境变量覆盖)
52
+ ARG REPO_URL=https://github.com/opq007/vd.git
53
+ ARG REPO_BRANCH=main
54
+
55
+ # 升级 pip 并安装 Python 依赖(分批安装以优化构建缓存)
56
+ RUN pip install --no-cache-dir --upgrade pip setuptools wheel && \
57
+ pip install --no-cache-dir --default-timeout=100 \
58
+ "faster-whisper" \
59
+ "fastapi" \
60
+ "uvicorn[standard]" \
61
+ "python-multipart" \
62
+ "aiofiles" \
63
+ "PyJWT" \
64
+ "gradio" \
65
+ "requests" && \
66
+ pip install --no-cache-dir --default-timeout=100 \
67
+ "playwright>=1.40.0" \
68
+ "opencv-python-headless" \
69
+ "numpy" \
70
+ "torch" \
71
+ "Pillow>=10.0.0" \
72
+ "soundfile" \
73
+ "transformers>=4.30.0" \
74
+ "onnxruntime" \
75
+ "modelscope" && \
76
+ pip install --no-cache-dir --default-timeout=100 \
77
+ "sentencepiece" \
78
+ "protobuf" \
79
+ "accelerate" \
80
+ "einops" \
81
+ "omegaconf" \
82
+ "scipy" \
83
+ "librosa"
84
+
85
+ # 克隆项目代码(自动获取最新版本)
86
+ RUN echo "Cloning project from ${REPO_URL} (branch: ${REPO_BRANCH})..." && \
87
+ git clone --depth 1 --branch ${REPO_BRANCH} ${REPO_URL} /tmp/vd && \
88
+ cp -r /tmp/vd/* . && \
89
+ cp -r /tmp/vd/.* . 2>/dev/null || true && \
90
+ rm -rf /tmp/vd && \
91
+ echo "Project cloned successfully"
92
+
93
+ # 创建必要的目录
94
+ RUN mkdir -p models uploads output debug logs && \
95
+ chmod -R 755 models uploads output debug logs
96
+
97
+ # 下载模型文件(使用 aria2 加速,添加重试机制)
98
+ # 1. 下载 RMBG-1.4 模型(背景移除)
99
+ RUN echo "Downloading RMBG-1.4 model..." && \
100
+ aria2c -x 16 -s 16 --max-tries=5 --retry-wait=5 \
101
+ -d models/ -o rmbg-1.4.onnx \
102
+ https://modelscope.cn/models/AI-ModelScope/RMBG-1.4/resolve/master/onnx/model.onnx || \
103
+ (echo "RMBG-1.4 download failed, retrying..." && \
104
+ aria2c -x 16 -s 16 --max-tries=10 --retry-wait=10 \
105
+ -d models/ -o rmbg-1.4.onnx \
106
+ https://modelscope.cn/models/AI-ModelScope/RMBG-1.4/resolve/master/onnx/model.onnx)
107
+
108
+ # 2. 下载 faster-whisper-small 模型
109
+ RUN echo "Downloading faster-whisper-small model..." && \
110
+ modelscope download --model angelala00/faster-whisper-small --local_dir ./models/small --revision master || \
111
+ (echo "faster-whisper download failed, retrying..." && \
112
+ modelscope download --model angelala00/faster-whisper-small --local_dir ./models/small --revision master)
113
+
114
+ # 3. 下载 VoxCPM ONNX 模型
115
+ RUN echo "Downloading VoxCPM ONNX model..." && \
116
+ aria2c -x 16 -s 16 --max-tries=5 --retry-wait=5 \
117
+ -d models/ -o onnx_models_v15.zip \
118
+ https://modelscope.cn/models/opqtest007/vox/resolve/master/onnx_models_v15.zip.ckpt || \
119
+ (echo "VoxCPM download failed, retrying..." && \
120
+ aria2c -x 16 -s 16 --max-tries=10 --retry-wait=10 \
121
+ -d models/ -o onnx_models_v15.zip \
122
+ https://modelscope.cn/models/opqtest007/vox/resolve/master/onnx_models_v15.zip.ckpt) && \
123
+ cd models/ && \
124
+ 7z x onnx_models_v15.zip -p -y && \
125
+ rm onnx_models_v15.zip && \
126
+ cd ..
127
+
128
+ # 4. 下载 VoxCPM 参考音频数据库
129
+ RUN echo "Downloading VoxCPM reference database..." && \
130
+ aria2c -x 16 -s 16 --max-tries=5 --retry-wait=5 \
131
+ -d models/ -o voxcpm_ref.db \
132
+ https://modelscope.cn/models/opqtest007/vox/resolve/master/voxcpm_ref.db || \
133
+ (echo "VoxCPM reference database download failed, retrying..." && \
134
+ aria2c -x 16 -s 16 --max-tries=10 --retry-wait=10 \
135
+ -d models/ -o voxcpm_ref.db \
136
+ https://modelscope.cn/models/opqtest007/vox/resolve/master/voxcpm_ref.db)
137
+
138
+ # 验证模型文件
139
+ RUN echo "Verifying model files..." && \
140
+ ls -lh models/ && \
141
+ ls -lh models/small/ 2>/dev/null || echo "small model not found" && \
142
+ ls -lh models/onnx_models_v15/ 2>/dev/null || echo "onnx_models_v15 not found" && \
143
+ ls -lh models/voxcpm_ref.db 2>/dev/null || echo "voxcpm_ref.db not found"
144
+
145
+ # 清理 pip 缓存和临时文件
146
+ RUN rm -rf /tmp/* /root/.cache/pip /root/.local/share/pip
147
+
148
+ # 暴露端口
149
+ EXPOSE 7860
150
+
151
+ # 创建非 root 用户(安全最佳实践)
152
+ RUN useradd -m -u 1000 appuser && \
153
+ chown -R appuser:appuser /app
154
+
155
+ # 切换到非 root 用户
156
+ USER appuser
157
+
158
+ # 启动命令(使用 uvicorn 的生产配置)
159
+ # 注意:Hugging Face Spaces 会自动检测服务是否启动
160
+ CMD ["uvicorn", "app:app", \
161
+ "--host", "0.0.0.0", \
162
+ "--port", "7860", \
163
+ "--workers", "1", \
164
+ "--log-level", "info", \
165
+ "--access-log", \
166
+ "--no-use-colors", \
167
+ "--timeout-keep-alive", "300"]