# 使用官方 PyTorch 基础镜像 FROM pytorch/pytorch:2.3.1-cuda11.8-cudnn8-runtime # 切换到 root 用户以进行系统级安装 USER root # 设置环境变量 ENV PYTHONUNBUFFERED=1 \ PIP_DISABLE_PIP_VERSION_CHECK=1 \ PIP_PREFER_BINARY=1 \ NUMBA_CACHE_DIR=/tmp/numba_cache # 设置工作目录 WORKDIR /app # 安装系统依赖 (--- 在这里添加了 curl ---) RUN apt-get update && \ apt-get install -y --no-install-recommends \ wget curl ffmpeg libsox-dev git \ build-essential cmake ninja-build pkg-config && \ rm -rf /var/lib/apt/lists/* && \ mkdir -p /tmp/numba_cache && chmod -R 777 /tmp/numba_cache # 创建并授权 NLTK 数据目录 RUN mkdir -p /nltk_data && chmod 777 /nltk_data # 克隆 GPT-SoVITS 仓库 RUN git clone --depth 1 https://github.com/RVC-Boss/GPT-SoVITS.git /app # 安装 Python 依赖 RUN pip install --upgrade pip && \ pip install --no-cache-dir -r /app/requirements.txt && \ pip install --no-cache-dir --force-reinstall numpy==1.23.5 librosa==0.9.2 numba==0.56.4 && \ pip install --no-cache-dir fastapi uvicorn soundfile huggingface_hub ffmpeg-python # 预下载 NLTK 数据包 RUN python -c "import nltk; nltk.download('punkt', quiet=True, download_dir='/nltk_data'); nltk.download('averaged_perceptron_tagger', quiet=True, download_dir='/nltk_data'); nltk.download('averaged_perceptron_tagger_eng', quiet=True, download_dir='/nltk_data')" # 预下载官方支持模型 COPY download_support_models.py /app/download_support_models.py RUN python /app/download_support_models.py || true # --- 从 Hugging Face Spaces 下载您自己的模型权重 --- ARG GPT_URL="https://huggingface.co/spaces/snsbhg/1111/resolve/main/weights/shantianliang_proplus_e32.ckpt" ARG SOVITS_URL="https://huggingface.co/spaces/snsbhg/1111/resolve/main/weights/shantianliang_proplus_e8_s192.pth" RUN mkdir -p /app/pretrained_models/shantianliang RUN wget -nv "$GPT_URL" -O /app/pretrained_models/shantianliang/shantianliang_proplus_e32.ckpt && \ wget -nv "$SOVITS_URL" -O /app/pretrained_models/shantianliang/shantianliang_proplus_e8_s192.pth # 复制参考音频 COPY reference_audio/ /app/reference_audio/ # --- [新] 复制监控和启动脚本 --- COPY monitor_and_upload.sh /app/monitor_and_upload.sh COPY start.sh /app/start.sh # --- [新] 赋予脚本执行权限 --- RUN chmod +x /app/start.sh /app/monitor_and_upload.sh # 更改 /app 目录所有权 RUN chown -R 1000:1000 /app # 暴露 API 端口 EXPOSE 7860 # --- [修改] 使用 start.sh 脚本作为启动命令 --- CMD ["/app/start.sh"]