From 9d52ce459b69283349e246e1bc802127d4eb53ee Mon Sep 17 00:00:00 2001 From: Seohyunjho Date: Tue, 28 Jul 2026 14:47:14 +0900 Subject: [PATCH] =?UTF-8?q?fix(ai-server):=20DGX=20=EC=9D=B4=EB=AF=B8?= =?UTF-8?q?=EC=A7=80=EC=97=90=20chromium=20+=20handoff=5Ftemplate=20?= =?UTF-8?q?=ED=8F=AC=ED=95=A8=20=E2=80=94=20editorial=20PDF=20=EB=A0=8C?= =?UTF-8?q?=EB=8D=94=20=EB=B3=B5=EA=B5=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit DGX에서 저장되는 핸드오프 리포트가 편집형(HTML→Chrome PDF)이 아니라 옛 ReportLab 폴백으로 나오던 문제 수정. 원인: ai-server 이미지에 (1) Chrome 부재 (`editorial_handoff._find_chrome()` → None → 렌더 스킵), (2) `docs/ai/handoff_template` 미복사. 두 조건 모두라 DGX에서 editorial PDF가 한 번도 생성된 적이 없었다. - Dockerfile: `chromium` + `fonts-noto-cjk`(Chrome 시스템 폰트 — 한글 렌더 필수) 설치. - Dockerfile: `COPY docs/ai/handoff_template /app/docs/ai/handoff_template` (`_template_dir()`가 `_repo_root()/docs/ai/handoff_template`로 해석, 컨테이너 _repo_root=/app). py=sys.executable(matplotlib 보유), make_charts 의존성 충족, .dockerignore가 docs 미제외 확인. 렌더 실패 시 기존 ReportLab 폴백 유지(무회귀). Co-Authored-By: Claude Opus 4.8 (1M context) --- apps/ai-server/Dockerfile | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/apps/ai-server/Dockerfile b/apps/ai-server/Dockerfile index a815889..7a63a4b 100644 --- a/apps/ai-server/Dockerfile +++ b/apps/ai-server/Dockerfile @@ -7,7 +7,12 @@ ENV PYTHONUNBUFFERED=1 \ WORKDIR /app -RUN apt-get update && apt-get install -y --no-install-recommends curl && \ +# curl(healthcheck) + chromium(F5 editorial handoff PDF, `services/editorial_handoff.py` +# → Chrome --headless --print-to-pdf) + fonts-noto-cjk(Chrome는 시스템 폰트를 쓰므로 +# 한글 리포트 렌더에 필수). chromium 없으면 `_find_chrome()`가 None → editorial 렌더가 +# 스킵되고 F5 ReportLab 폴백 PDF가 저장된다(= DGX에서 편집형 PDF가 안 나오던 원인). +RUN apt-get update && apt-get install -y --no-install-recommends \ + curl chromium fonts-noto-cjk && \ rm -rf /var/lib/apt/lists/* && \ pip install --no-cache-dir uv && \ useradd --create-home --shell /bin/bash --uid 1001 app @@ -59,6 +64,12 @@ ENV PROMPTS_BASE_DIR=/app/prompts COPY apps/ai-server/assets/fonts /app/apps/ai-server/assets/fonts COPY apps/ai-server/scripts/build_korean_fonts.py /app/apps/ai-server/scripts/build_korean_fonts.py +# F5 editorial handoff 템플릿(HTML/CSS/JS + build_report_json/make_charts 스크립트 + +# 번들 trend_plotter_editorial). `services/editorial_handoff.py::_template_dir()`가 +# `_repo_root()/docs/ai/handoff_template`로 해석하며, 컨테이너에선 `_repo_root()`가 +# `/app`이므로 여기로 복사한다. 이게 없으면 Chrome이 있어도 편집형 렌더가 실패한다. +COPY docs/ai/handoff_template /app/docs/ai/handoff_template + WORKDIR /app/apps/ai-server RUN uv pip install --system -e . && \