# o2o-site-ontology — 발행 사이트의 메타 키워드를 주는 서비스. # ★ 왜 이 레포 안에 있나 (2026-09-14) — 발행 파이프라인이 이걸 부르는데 따로 띄워 두면 # "코드는 올라갔는데 서버가 없어" 로 조용히 키워드 없이 발행된다. compose 한 벌로 같이 뜬다. # ★ alpine 을 쓰지 않는다 (2026-09-14 실측). 임베딩 런타임(onnxruntime)이 musl 용 바이너리를 # 내주지 않아 적재가 ERR_DLOPEN_FAILED 로 죽는다 — 빌드는 성공하고 실행에서만 터진다. FROM node:22-slim WORKDIR /app # 의존성 먼저 — 소스만 바뀌면 이 층은 캐시된다. COPY package.json package-lock.json ./ RUN npm ci COPY . . RUN npm run build # 임베딩 모델(약 120MB)은 첫 실행에 받아 볼륨에 남긴다 — 이미지에 굽지 않는다. ENV PORT=3100 \ TRANSFORMERS_CACHE=/app/.cache \ HF_HOME=/app/.cache EXPOSE 3100 CMD ["node", "dist/main.js"]