| # 멀티아키 backend 이미지 — llama-cpp-python 임베드 단일 프로세스. | |
| # 외부 추론 데몬·서비스 의존 없음. | |
| # | |
| # 빌드: | |
| # docker buildx build --platform linux/amd64,linux/arm64 -t kpaa-backend . | |
| # 또는 docker-compose가 알아서 (build: .) | |
| FROM python:3.11-slim AS base | |
| # Build deps for native wheels (lxml, llama-cpp-python sdist fallback). | |
| # llama-cpp-python은 보통 manylinux wheel을 받지만, arm64에서 빌드가 필요할 수 있어 | |
| # build-essential + cmake 포함. | |
| RUN apt-get update && apt-get install -y --no-install-recommends \ | |
| build-essential \ | |
| cmake \ | |
| ca-certificates \ | |
| curl \ | |
| && rm -rf /var/lib/apt/lists/* | |
| ENV PYTHONUNBUFFERED=1 \ | |
| PYTHONDONTWRITEBYTECODE=1 \ | |
| PIP_DISABLE_PIP_VERSION_CHECK=1 \ | |
| PIP_NO_CACHE_DIR=1 \ | |
| PYTHONUTF8=1 \ | |
| KPAA_HOST=0.0.0.0 \ | |
| KPAA_PORT=8000 | |
| # GPU offload 는 컨테이너 *런타임* 의 llama-cpp 빌드에 따라 자동 결정. | |
| # CPU 빌드 컨테이너: 자동 0. GPU 빌드 컨테이너: 자동 -1. | |
| # 강제 override 가 필요하면 docker-compose 의 environment 에 KPAA_N_GPU_LAYERS=... 추가. | |
| WORKDIR /app | |
| # 의존성 먼저 설치 (캐시 효율) | |
| COPY pyproject.toml README.md LICENSE NOTICE ./ | |
| COPY src/ ./src/ | |
| RUN pip install --upgrade pip \ | |
| && pip install '.[llm]' | |
| # 데이터 자산 (상담사례 스냅샷 동봉) | |
| COPY data/ ./data/ | |
| # 모델·법제처 캐시는 named volume으로 마운트 (도커가 처리) | |
| VOLUME ["/root/.cache/kpaa"] | |
| EXPOSE 8000 | |
| HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ | |
| CMD curl -fsS http://127.0.0.1:8000/healthz || exit 1 | |
| CMD ["python", "-m", "kpaa", "serve", "--host", "0.0.0.0", "--port", "8000"] | |