# Python 3.9 Slim 이미지를 기반으로 사용합니다. FROM python:3.9-slim # 필수 패키지 및 빌드 도구 설치 # apt-get update: 패키지 목록 업데이트 # git: GitHub 저장소 클론에 필요 # build-essential: C/C++ 컴파일러 (gcc, g++ 등) 및 기타 빌드 도구 포함 # curl: Rust 설치 스크립트 다운로드용 # libffi-dev, libssl-dev: 일부 Python 패키지(예: cryptography) 빌드 시 필요할 수 있음 RUN apt-get update && apt-get install -y --no-install-recommends \ git \ build-essential \ curl \ libffi-dev \ libssl-dev \ && rm -rf /var/lib/apt/lists/* # apt 캐시 정리하여 이미지 크기 줄이기 # Rust 컴파일러 설치 (tokenizers 빌드용) # rustup은 Rust 도구 체인 관리의 공식적인 방법입니다. # -y: 모든 프롬프트에 'yes'로 자동 응답 # --default-toolchain stable: 안정적인 최신 툴체인 설치 RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain stable # Rust의 실행 파일 경로를 PATH 환경 변수에 추가 # rustup은 기본적으로 /root/.cargo/bin에 설치합니다. ENV PATH="/root/.cargo/bin:${PATH}" # --- TRANSFORMERS_CACHE 환경 변수 설정 --- # Hugging Face 캐시 디렉토리를 쓰기 가능한 /tmp 디렉토리로 설정합니다. ENV TRANSFORMERS_CACHE="/tmp/huggingface_cache" # 작업 디렉토리 설정 WORKDIR /app # 전체 코드 복사 (requirements.txt, app.py, .pkl 파일 등) COPY . . # Python 패키지 설치 # pip 업그레이드를 먼저 수행하여 최신 pip이 wheel 파일을 잘 찾도록 합니다. RUN pip install --no-cache-dir --upgrade pip # 모든 패키지를 한 번에 설치하여 의존성 충돌을 최소화하고, 최신 버전을 사용합니다. # --no-cache-dir: 캐시를 사용하지 않아 이미지 크기를 줄입니다. RUN pip install --no-cache-dir \ fastapi \ uvicorn \ torch==1.13.1 \ transformers==4.30.2 \ tokenizers==0.13.3 \ sentencepiece \ numpy==1.23.5 \ protobuf==3.20.3 \ psutil \ gluonnlp==0.10.0 \ mxnet-mkl==1.6.0 \ huggingface_hub \ git+https://github.com/SKTBrain/KOBERT#egg=kobert_tokenizer\&subdirectory=kobert_hf # FastAPI 애플리케이션 실행 # --host 0.0.0.0: 모든 네트워크 인터페이스에서 접근 허용 # --port 7860: 애플리케이션이 수신할 포트 (Render는 $PORT 환경 변수를 사용하지만, Dockerfile에서는 고정 포트 설정) CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "7860"]