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