cosyvoice2-server / Dockerfile
bigeco's picture
Update Dockerfile
a28587a verified
# 베이스 이미지 선택
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"]