File size: 2,133 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
52
53
54
55
56
57
58
59
60
61
62
# KPAA all-in-one — backend(=FastAPI + llama-cpp-python 임베드) + Open WebUI.
# 외부 추론 데몬·서비스 없는 단일 프로세스 구성.
#
# 사용:
#     cp .env.example .env       # LAW_OC=... 입력
#     docker compose up -d
#     # → http://localhost:3000 (Open WebUI)
#
# 첫 실행 시 backend 컨테이너가 Gemma 4 E2B GGUF (~3.2GB)을 자동으로
# `kpaa-models` 볼륨에 받음. 5~15분 소요. `docker compose logs -f backend` 로 진행 확인.

services:
  backend:
    build:
      context: .
      dockerfile: Dockerfile
    image: kpaa-backend:latest
    restart: unless-stopped
    environment:
      - LAW_OC=${LAW_OC:-}
      - KPAA_HOST=0.0.0.0
      - KPAA_PORT=8000
      # GPU offload 는 *자동 감지*. 강제 override 시 host shell 에서 export:
      #     KPAA_N_GPU_LAYERS=-1 docker compose up
      - KPAA_N_GPU_LAYERS=${KPAA_N_GPU_LAYERS:-}
    volumes:
      - kpaa-models:/root/.cache/kpaa   # 모델 + 법제처 캐시 영속화
    ports:
      - "8000:8000"
    healthcheck:
      test: ["CMD", "curl", "-fsS", "http://127.0.0.1:8000/healthz"]
      interval: 30s
      timeout: 5s
      retries: 5
      start_period: 60s   # 첫 모델 로드까지 시간 여유

  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    restart: unless-stopped
    depends_on:
      backend:
        condition: service_started
    environment:
      # backend의 OpenAI-호환 endpoint를 미리 주입 — UI에서 별도 설정 불필요
      - OPENAI_API_BASE_URLS=http://backend:8000/v1
      - OPENAI_API_KEYS=local
      - WEBUI_NAME=KPAA  개인정보보호법 상담
      # 백엔드 default preset(`gemma-4-e2b-q4`) 과 동일. dropdown 에서
      # 다른 프리셋을 고르면 백엔드 ModelManager 가 자동 전환.
      - DEFAULT_MODELS=개인정보 상담 AI(gemma-4-e2b-q4)
      # OpenWebUI 의 Ollama 자동 감지 차단 — KPAA backend(:8000) 만 사용.
      - ENABLE_OLLAMA_API=false
      - DEFAULT_USER_ROLE=admin
    volumes:
      - open-webui-data:/app/backend/data
    ports:
      - "3000:8080"

volumes:
  kpaa-models:
  open-webui-data: