| # 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: | |