feat(deploy): 도커 배포(deploy/docker: compose+Dockerfile+deploy.sh) — 우리 환경용. 렌더러가 FabriX/OpenRouter 템플릿 자동 선택, 호스트 변수화. bare deploy.sh 는 git pull 포함. Phoenix 도커 compose
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5.1
parent
f55e673cb5
commit
ea1fd350da
@@ -1,10 +1,11 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""고객사(FabriX)용 opencode.json 만들기 — 템플릿의 ${이름} 을 .env 값으로 채움.
|
||||
"""opencode.json 만들기 — 템플릿의 ${이름} 을 .env 값으로 채움.
|
||||
|
||||
python opencode/render_opencode.py # ../.env 읽어서 opencode/opencode.json 덮어씀
|
||||
python opencode/render_opencode.py --check # 쓰진 않고 결과만 출력
|
||||
|
||||
개발(OpenRouter)로 돌아가려면 `git checkout opencode/opencode.json`.
|
||||
템플릿 고르기: AAF_FABRIX_BASE_URL 이 있으면 고객사(FabriX 게이트웨이), 없으면 OpenRouter(우리 환경·로컬).
|
||||
호스트: BACKEND_HOST/MCP_HOST 기본 127.0.0.1, 도커 compose 에선 be / mcp 컨테이너 이름.
|
||||
ABAP_OPENCODE web/deploy/bare/render-opencode.py 와 같은 규칙:
|
||||
AAF_FABRIX_MODELS="605:Gemma4,339:GaussO Flash,581:GaussO Think" → 모델 목록. 키가 곧 x-llm-model-id.
|
||||
비어 있으면 AAF_FABRIX_MODEL_ID 하나(이름 FabriX). 기본 모델은 목록의 첫 번째.
|
||||
@@ -34,7 +35,7 @@ def load_env(path: Path) -> dict[str, str]:
|
||||
k, v = line.split("=", 1)
|
||||
v = v.split(" #", 1)[0].strip().strip("\"'") # 줄 끝 주석은 두 칸 띄고 #
|
||||
out[k.strip()] = v
|
||||
out.update({k: v for k, v in os.environ.items() if k.startswith(("AAF_", "BACKEND_PORT", "MCP_", "OPENCODE_"))})
|
||||
out.update({k: v for k, v in os.environ.items() if k.startswith(("AAF_", "BACKEND_", "MCP_", "OPENCODE_", "OPENROUTER_"))})
|
||||
return out
|
||||
|
||||
|
||||
@@ -53,7 +54,9 @@ def render(env: dict[str, str]) -> str:
|
||||
return m
|
||||
values["AAF_FABRIX_MODELS_JSON"] = json.dumps({mid: _model(mid, name) for mid, name in models.items()}, ensure_ascii=False)
|
||||
values["AAF_FABRIX_DEFAULT_MODEL"] = next(iter(models))
|
||||
values.setdefault("BACKEND_HOST", "127.0.0.1")
|
||||
values.setdefault("BACKEND_PORT", "8001")
|
||||
values.setdefault("MCP_HOST", "127.0.0.1")
|
||||
values.setdefault("MCP_PORT", "8888")
|
||||
# SAP MCP: MCP_API_KEY 가 있으면 켬. 없으면 끔(로컬 개발)
|
||||
values["SAP_MCP_ENABLED"] = "true" if values.get("MCP_API_KEY") else "false"
|
||||
@@ -67,7 +70,8 @@ def render(env: dict[str, str]) -> str:
|
||||
missing.append(m.group(1))
|
||||
return v
|
||||
|
||||
text = re.sub(r"\$\{(\w+)\}", fill, (HERE / "opencode.fabrix.json.tmpl").read_text(encoding="utf-8"))
|
||||
tmpl = "opencode.fabrix.json.tmpl" if env.get("AAF_FABRIX_BASE_URL") else "opencode.openrouter.json.tmpl"
|
||||
text = re.sub(r"\$\{(\w+)\}", fill, (HERE / tmpl).read_text(encoding="utf-8"))
|
||||
if missing:
|
||||
print("경고: 비어 있는 값 —", ", ".join(sorted(set(missing))), file=sys.stderr)
|
||||
return text
|
||||
|
||||
Reference in New Issue
Block a user