File size: 1,724 Bytes
9344f01
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# 멀티아키 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"]