Files
hyungi_document_server/credentials.env.example
T
Hyungi Ahn fee6dbee1c feat(ask): Phase 3.5 A0 — ask_events source/eval_case_id + eval auth boundary
- migrations 138~142: source TEXT DEFAULT 'document_server' + eval_case_id TEXT
  추가, 인덱스 2개, backfill, 1주 관찰 후 NOT NULL (140 적용 분리)
- app/models/ask_event.py: source / eval_case_id ORM 필드 (138~141 단계 nullable)
- app/services/search_telemetry.py: record_ask_event 시그니처에 source / eval_case_id
- app/core/config.py: settings.eval_runner_token + EVAL_RUNNER_TOKEN env 로드
- app/api/search.py:
  - X-Source / X-Eval-Case-Id / X-Eval-Token 헤더 수신
  - _resolve_eval_identity(): hmac.compare_digest 로 token 검증, 실패 시 source
    'document_server' 강등 + warning log + eval_case_id=None
  - 두 record_ask_event 호출에 검증된 source/eval_case_id 전달
- credentials.env.example: EVAL_RUNNER_TOKEN= (empty default = 모든 eval claim 거부)
- tests/test_ask_eval_auth.py: 9 케이스 — token 없음/틀림/일치, env 미설정,
  case_id only, non-eval source forces case_id None

trust boundary: 일반 client 의 X-Source=eval / X-Eval-Case-Id 시도는 무시되어
calibration telemetry 오염 불가. eval runner 만 EVAL_RUNNER_TOKEN 으로 인증.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-17 08:00:36 +09:00

60 lines
2.1 KiB
Bash

# ═══════════════════════════════════════════════════
# hyungi_Document_Server — 인증 정보 템플릿
# 실제 값을 채워서 credentials.env로 저장
# ═══════════════════════════════════════════════════
# ─── PostgreSQL ───
POSTGRES_HOST=localhost
POSTGRES_PORT=5432
POSTGRES_DB=pkm
POSTGRES_USER=pkm
POSTGRES_PASSWORD=
# ─── AI: Mac mini MLX (Tailscale 경유, Qwen3.5 기본 모델) ───
MLX_ENDPOINT=http://100.76.254.116:8800/v1/chat/completions
MLX_MODEL=mlx-community/Qwen3.5-35B-A3B-4bit
# ─── AI: Claude API (종량제, 복잡한 분석 전용) ───
CLAUDE_API_KEY=
# ─── AI Gateway (같은 Docker 네트워크) ───
AI_GATEWAY_ENDPOINT=http://ai-gateway:8080
# ─── NAS (NFS 마운트) ───
NAS_NFS_PATH=/mnt/nas/Document_Server
NAS_DOMAIN=ds1525.hyungi.net
NAS_TAILSCALE_IP=100.101.79.37
NAS_PORT=15001
# ─── Synology MailPlus (이메일 수집 + SMTP 알림) ───
MAILPLUS_HOST=mailplus.hyungi.net
MAILPLUS_PORT=993
MAILPLUS_SMTP_PORT=465
MAILPLUS_USER=hyungi
MAILPLUS_PASS=
# ─── Synology Calendar (CalDAV, 태스크 관리) ───
CALDAV_URL=https://ds1525.hyungi.net/caldav/
CALDAV_USER=hyungi
CALDAV_PASS=
# ─── kordoc 마이크로서비스 ───
KORDOC_ENDPOINT=http://kordoc-service:3100
# ─── 인증 (JWT + TOTP) ───
JWT_SECRET=
TOTP_SECRET=
# ─── 뉴스 수집: NYT API ───
NYT_API_KEY=
# ─── 국가법령정보센터 (법령 모니터링) ───
LAW_OC=
# ─── Phase 3.5 fix2: eval runner shared secret ───
# /ask 엔드포인트의 X-Source=eval / X-Eval-Case-Id 헤더 신뢰 검증 토큰.
# 비어있거나 클라이언트 X-Eval-Token 와 불일치 시 eval 헤더 거부 (warning log + source='document_server' 강등).
# 충분히 긴 random secret 권장 (예: openssl rand -hex 32).
# scripts/run_eval_ask.py runner 가 동일 값을 X-Eval-Token 헤더로 전송해야 eval telemetry 적재됨.
EVAL_RUNNER_TOKEN=