Spaces:
Build error
Build error
| # 베이스 이미지 선택 | |
| FROM python:3.10-slim | |
| # 필수 패키지 설치 | |
| RUN apt-get update && \ | |
| apt-get install -y \ | |
| git \ | |
| unzip \ | |
| ffmpeg \ | |
| build-essential \ | |
| g++ \ | |
| gcc \ | |
| python3-dev \ | |
| libffi-dev \ | |
| libssl-dev \ | |
| fontconfig && \ | |
| apt-get clean && \ | |
| rm -rf /var/lib/apt/lists/* | |
| WORKDIR /app | |
| # 환경변수 설정 (/tmp 경로로 변경하여 캐시 문제 해결) | |
| ENV PYTHONPATH="/app/model:/app/model/third_party/Matcha-TTS:/app:$PYTHONPATH" | |
| ENV HF_HOME="/tmp/.cache/huggingface" | |
| ENV MPLCONFIGDIR="/tmp/.cache/matplotlib" | |
| ENV FONTCONFIG_PATH="/tmp/.cache/fontconfig" | |
| ENV NUMBA_DISABLE_JIT=1 | |
| ENV NUMBA_DISABLE_CUDA=1 | |
| ENV MODELSCOPE_CACHE="/tmp/.cache/modelscope" | |
| # 캐시 및 출력 디렉토리들 생성 및 권한 설정 | |
| RUN mkdir -p /tmp/.cache/huggingface && \ | |
| mkdir -p /tmp/.cache/matplotlib && \ | |
| mkdir -p /tmp/.cache/fontconfig && \ | |
| mkdir -p /tmp/.cache/modelscope && \ | |
| mkdir -p /app/outputs && \ | |
| mkdir -p /.config/matplotlib && \ | |
| mkdir -p /.modelscope && \ | |
| mkdir -p /tmp && \ | |
| chmod -R 777 /tmp/.cache && \ | |
| chmod -R 777 /app/outputs && \ | |
| chmod -R 777 /.config && \ | |
| chmod -R 777 /.modelscope && \ | |
| chmod -R 777 /tmp | |
| # requirements.txt 복사 및 설치 | |
| COPY requirements.txt . | |
| RUN pip install --upgrade pip | |
| RUN pip install -r requirements.txt | |
| # 모든 파일 복사 | |
| COPY . . | |
| # 디렉토리 구조 확인 및 생성 | |
| RUN mkdir -p /app/model/third_party/Matcha-TTS | |
| # 심볼릭 링크 생성 (cosyvoice와 matcha 모듈을 루트에서 접근 가능하게) | |
| RUN ln -sf /app/model/cosyvoice /app/cosyvoice | |
| RUN ln -sf /app/model/third_party/Matcha-TTS /app/matcha | |
| # CosyVoice가 찾는 경로에 맞춰 pretrained_models 심볼릭 링크 생성 | |
| # ROOT_DIR이 /app/cosyvoice라면 ../../pretrained_models는 /app/pretrained_models가 됨 | |
| RUN ln -sf /app/pretrained_models /app/model/pretrained_models | |
| RUN ln -sf /app/pretrained_models /app/cosyvoice/pretrained_models | |
| # 모델 다운로드 (빌드 타임에 수행) | |
| RUN python -c "\ | |
| from modelscope import snapshot_download;\ | |
| snapshot_download('iic/CosyVoice2-0.5B', local_dir='/app/pretrained_models/CosyVoice2-0.5B');\ | |
| snapshot_download('iic/CosyVoice-ttsfrd', local_dir='/app/pretrained_models/CosyVoice-ttsfrd')" | |
| # 리소스 압축 해제 | |
| RUN cd /app/pretrained_models/CosyVoice-ttsfrd && \ | |
| if [ -f "resource.zip" ]; then \ | |
| echo "Extracting resource.zip..."; \ | |
| unzip -o resource.zip && \ | |
| chmod -R 755 resource/ && \ | |
| echo "Resource extraction completed"; \ | |
| ls -la resource/; \ | |
| else \ | |
| echo "resource.zip not found"; \ | |
| ls -la .; \ | |
| fi | |
| # 디렉토리 구조 최종 확인 | |
| RUN echo "=== Final directory structure ===" && \ | |
| ls -la /app/pretrained_models/ && \ | |
| echo "=== CosyVoice-ttsfrd contents ===" && \ | |
| ls -la /app/pretrained_models/CosyVoice-ttsfrd/ && \ | |
| echo "=== Resource directory ===" && \ | |
| ls -la /app/pretrained_models/CosyVoice-ttsfrd/resource/ || echo "resource directory not found" | |
| # .whl 파일 설치 (빌드 타임에 수행) | |
| RUN cd /app && \ | |
| if [ -f "pretrained_models/CosyVoice-ttsfrd/ttsfrd_dependency-0.1-py3-none-any.whl" ]; then \ | |
| pip install pretrained_models/CosyVoice-ttsfrd/ttsfrd_dependency-0.1-py3-none-any.whl; \ | |
| else \ | |
| echo "ttsfrd_dependency whl not found"; \ | |
| fi | |
| RUN cd /app && \ | |
| if [ -f "pretrained_models/CosyVoice-ttsfrd/ttsfrd-0.4.2-cp310-cp310-linux_x86_64.whl" ]; then \ | |
| pip install pretrained_models/CosyVoice-ttsfrd/ttsfrd-0.4.2-cp310-cp310-linux_x86_64.whl; \ | |
| else \ | |
| echo "ttsfrd core whl not found"; \ | |
| ls -la pretrained_models/CosyVoice-ttsfrd/; \ | |
| fi | |
| # 포트 노출 (Hugging Face Spaces는 7860 사용) | |
| EXPOSE 7860 | |
| # FastAPI app 실행 (모델은 startup시 자동 초기화) | |
| CMD ["python", "app.py"] |