# KPAA UI Space — Open WebUI pointing to KPAA Backend Space. # # Open WebUI 공식 이미지를 그대로 쓰되 HF Spaces 정책(UID 1000 + writable /app)에 # 맞추기 위해 chown + 필수 env 추가. FROM ghcr.io/open-webui/open-webui:main # ─── Backend wiring ────────────────────────────────────────────────────── ENV OPENAI_API_BASE_URLS="https://scvcoder-kpaa.hf.space/v1" ENV OPENAI_API_KEYS="hf-spaces-internal" ENV ENABLE_OLLAMA_API=false ENV WEBUI_NAME="KPAA — 개인정보보호법 상담" # 백엔드의 default preset (`gemma-4-e2b-q4`) 과 동일해야 Open WebUI 자동 선택. # 사용자가 dropdown 에서 다른 프리셋을 고르면 백엔드의 ModelManager 가 자동 전환. ENV DEFAULT_MODELS="개인정보 상담 AI(gemma-4-e2b-q4)" ENV WEBUI_AUTH=false # Cross-site iframe (backend Space 의 _SPLIT_HTML 가 본 Space 를 iframe) 에서 # 인증 cookie 가 차단되지 않도록 SameSite=none + Secure=true. HF Space 는 HTTPS. ENV WEBUI_AUTH_COOKIE_SAME_SITE=none ENV WEBUI_AUTH_COOKIE_SECURE=true # Open WebUI 0.9 의 PersistentConfig 는 DB 에 한 번 박힌 값이 ENV 를 덮는다. # DATA_DIR=/tmp/openwebui-data 가 일부 재시작에서 살아남으면 빈/구식 connection # 값이 위 OPENAI_API_BASE_URLS/OPENAI_API_KEYS 를 가려 "사용 가능한 모델이 없습니다" # 상태로 빠진다. ENV 를 항상 우선시켜 Space 의 백엔드 wiring 을 결정적으로 유지. ENV ENABLE_PERSISTENT_CONFIG=false # ─── HF Spaces / UID 1000 권한 정리 ─────────────────────────────────────── USER root RUN chown -R 1000:1000 /app && \ mkdir -p /tmp/openwebui-data && \ chown -R 1000:1000 /tmp/openwebui-data ENV DATA_DIR=/tmp/openwebui-data # ─── Inject route-change postMessage script into Open WebUI HTML ───────── # Cross-origin iframe 정책상 부모 창은 자식의 URL 변경을 감지할 수 없다. # Open WebUI HTML 에 작은 polling 스크립트를 주입해서 location.pathname # 변경 시 부모 창에 postMessage 로 알린다. 백엔드 Space 의 split HTML 이 # 이 메시지를 받으면 우측 참고자료를 자동 초기화. RUN sh -c "for f in /app/build/index.html /app/backend/open_webui/static/index.html; do \ if [ -f \"\$f\" ]; then \ sed -i 's|||' \"\$f\"; \ echo \"injected into: \$f\"; \ fi; \ done" USER 1000 # Open WebUI listens on 8080 by default. ENV PORT=8080 EXPOSE 8080