발행이 SiteOntology 를 부르는데 서버는 따로 띄워야 했다. 실측(2026-09-14): 서버가 없으면 `[seo] SiteOntology 실패 — 키워드 없이 발행: ConnectError` 로 빌드는 성공하고 메타만 빈다 — 화면으로는 안 보이는 종류다. 한 벌로 묶어 "코드는 올라갔는데 서버가 없는" 상태를 없앤다. - ontology/: gitea.o2o.kr/Web4ai/o2o-site-ontology 를 이 레포로 편입(그 원격은 그대로 남는다) - ontology/Dockerfile(신규): 베이스는 node:22-slim. alpine 은 임베딩 런타임(onnxruntime)이 musl 바이너리를 안 줘서 적재가 ERR_DLOPEN_FAILED 로 죽는다 — 빌드는 성공하고 실행에서만 터진다 - docker-compose.yml: ontology · ontology-postgres(pgvector) · ontology-redis 추가. 자체 DB 를 쓰는 이유는 pgvector 확장 때문이다 — web4ai_db 를 남의 서비스 확장에 묶지 않는다 - 임베딩 모델(120MB)은 이미지에 굽지 않고 볼륨(ontology-model)에 남긴다 - 컨테이너끼리는 `http://ontology:3100` 으로 만난다. `.env` 의 127.0.0.1 은 컨테이너 자기 자신이라 안 닿는다 검증: 3개 기동 · 백엔드 컨테이너에서 ontology:3100/demo HTTP 200 · 마이그레이션·시드 완료 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
42 lines
1.5 KiB
Bash
Executable File
42 lines
1.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# 클론 직후 로컬 세팅 한 번에.
|
|
# npm run setup
|
|
set -euo pipefail
|
|
cd "$(dirname "$0")/.."
|
|
|
|
step() { printf '\n\033[1m▶ %s\033[0m\n' "$1"; }
|
|
|
|
step "사전 점검"
|
|
command -v docker >/dev/null || { echo "❌ docker 가 필요합니다"; exit 1; }
|
|
docker info >/dev/null 2>&1 || { echo "❌ Docker Desktop 을 실행해 주세요"; exit 1; }
|
|
node -e 'process.exit(+process.versions.node.split(".")[0] >= 20 ? 0 : 1)' \
|
|
|| { echo "❌ Node 20 이상이 필요합니다 (현재 $(node -v))"; exit 1; }
|
|
echo " docker ok · node $(node -v)"
|
|
|
|
step ".env 준비"
|
|
if [ -f .env ]; then echo " 이미 있음 — 건너뜀"; else cp .env.example .env; echo " .env.example → .env"; fi
|
|
|
|
step "컨테이너 기동 (postgres+pgvector, redis)"
|
|
docker compose up -d --wait
|
|
|
|
step "스키마 마이그레이션"
|
|
npm run --silent db:migrate
|
|
|
|
step "기준 데이터 시드 (업종·지역·데모 업체)"
|
|
npm run --silent db:seed
|
|
|
|
step "키워드 적재 — 군산 상세"
|
|
echo " 최초 1회 임베딩 모델을 내려받습니다 (약 120MB, 1~2분)"
|
|
npm run --silent dataset:ingest 2>&1 | grep -vE '^\s*적재 [0-9]+/' || true
|
|
|
|
step "키워드 적재 — 전국 54개 지역"
|
|
npm run --silent dataset:ingest-nationwide 2>&1 | grep -vE '^\s*적재 [0-9]+/' || true
|
|
|
|
step "완료"
|
|
cat <<'MSG'
|
|
npm start → http://localhost:3100
|
|
http://localhost:3100/demo 매칭 콘솔 (입력창에 "스테이 머뭄")
|
|
|
|
엑셀 산출이 필요하면: pip3 install -r scripts/requirements.txt
|
|
MSG
|