# 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}" # 작업 디렉토리 설정 WORKDIR /app # 전체 코드 복사 (requirements.txt, main.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==3.0.2 \ tokenizers==0.8.1rc1 \ sentencepiece \ numpy==1.23.1 \ protobuf==3.20.3 \ psutil \ gluonnlp==0.10.0 \ mxnet-mkl==1.6.0 # kobert_tokenizer는 Git 저장소에서 설치하므로 별도 명령으로 분리합니다. RUN pip install --no-cache-dir git+https://github.com/SKTBrain/KOBERT#egg=kobert_tokenizer\&subdirectory=kobert_tokenizer # FastAPI 애플리케이션 실행 # --host 0.0.0.0: 모든 네트워크 인터페이스에서 접근 허용 # --port 7860: 애플리케이션이 수신할 포트 (Render는 $PORT 환경 변수를 사용하지만, Dockerfile에서는 고정 포트 설정) CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "7860"]