Deploy: exdev sync 2026-08-01 21:04:26

This commit is contained in:
Macbook
2026-08-01 21:04:26 +09:00
parent b071aff2d9
commit 39f41d90b0
25 changed files with 37781 additions and 8 deletions
+95 -3
View File
@@ -8,6 +8,7 @@
# ./server-dev/start-all-server.sh --skip-legacy-stop
# ./server-dev/start-all-server.sh --no-pull # git 동기화 생략
# ./server-dev/start-all-server.sh --no-push # Gitea push 생략
# ./server-dev/start-all-server.sh --skip-oracle # TROAD Oracle 기동 생략
# ./server-dev/start-all-server.sh --local # 로컬 Mac 개발 모드 (local-dev 위임)
#
# 로컬 Mac 실행 시: 현재 소스 → 개발서버(Gitea/exdev)만 반영·배포.
@@ -33,9 +34,11 @@ ENV_TEMPLATE="${SERVER_DEV_DIR}/env.exdev-server.template"
RAG_ENV="${RAG_DIR}/.env"
COMPOSE_SERVER="${RAG_DIR}/docker-compose.server.yml"
COMPOSE_CADDY="${SERVER_DEV_DIR}/docker-compose.caddy.yml"
COMPOSE_ORACLE="${SERVER_DEV_DIR}/docker-compose.oracle.yml"
LEGACY_STACK_DIR="${LEGACY_STACK_DIR:-/Users/aidev/dev/exAIChatbot2.0}"
MONGO_CONTAINER="${MONGO_CONTAINER:-exaichatbot-agent-mongo}"
ORACLE_CONTAINER="${ORACLE_CONTAINER:-exaichatbot-agent-oracle-troad}"
INTERNAL_TOOL_API_KEY="${INTERNAL_TOOL_API_KEY:-exdev-agent-tool-key}"
PUBLIC_BASE_URL="${PUBLIC_BASE_URL:-https://chatbot.exdev.co.kr}"
@@ -53,6 +56,7 @@ SKIP_JAVA=false
SKIP_LEGACY_STOP=false
SKIP_CADDY=false
SKIP_DESKTOP=false
SKIP_ORACLE=false
NO_PULL=false
NO_PUSH=false
LOCAL_DEV=false
@@ -65,11 +69,12 @@ for arg in "$@"; do
--skip-legacy-stop) SKIP_LEGACY_STOP=true ;;
--skip-caddy) SKIP_CADDY=true ;;
--skip-desktop) SKIP_DESKTOP=true ;;
--skip-oracle) SKIP_ORACLE=true ;;
--no-pull) NO_PULL=true ;;
--no-push) NO_PUSH=true ;;
--local) LOCAL_DEV=true ;;
-h|--help)
sed -n '2,14p' "$0"
sed -n '2,15p' "$0"
exit 0
;;
*)
@@ -369,6 +374,91 @@ ensure_mongo() {
wait_port 27017 "MongoDB" 30 || true
}
oracle_container_running() {
docker ps --format '{{.Names}}' 2>/dev/null | grep -qx "${ORACLE_CONTAINER}"
}
wait_oracle_ready() {
local max="${1:-300}" i=0
log "Oracle TROAD 준비 대기 (최대 ${max}s)..."
while (( i < max )); do
if oracle_container_running && docker exec "${ORACLE_CONTAINER}" healthcheck.sh >/dev/null 2>&1; then
log "✅ Oracle TROAD ready (localhost:1521/orcl2, OPR_MAIN)"
return 0
fi
sleep 5
i=$((i + 5))
done
warn "Oracle TROAD 타임아웃 — docker logs ${ORACLE_CONTAINER}"
docker logs --tail 40 "${ORACLE_CONTAINER}" 2>/dev/null | sed 's/^/ /' || true
return 1
}
# 교통정보 뷰가 비어 있으면 oracle/apply-sql.sh 로 적용한다.
# (기존 chatbotApi SQL: TROAD_APP.V_ROUTE_NEW_NM / V_ROUTE_TRFC_VER001 등 — 앱 로직 변경 없음)
ensure_troad_schema() {
local apply="${SERVER_DEV_DIR}/oracle/apply-sql.sh"
[[ -x "$apply" ]] || return 0
local rows route_rows
rows="$(docker exec -e NLS_LANG=.AL32UTF8 "${ORACLE_CONTAINER}" bash -lc \
"sqlplus -S -L OPR_MAIN/${ORACLE_TROAD_PASSWORD:-test}@localhost:1521/ORCL2 <<'EOSQL'
SET HEADING OFF
SET FEEDBACK OFF
SET PAGESIZE 0
SELECT COUNT(*) FROM V_INCIDENT_FTMS;
EXIT
EOSQL" 2>/dev/null | tr -dc '0-9')"
route_rows="$(docker exec -e NLS_LANG=.AL32UTF8 "${ORACLE_CONTAINER}" bash -lc \
"sqlplus -S -L OPR_MAIN/${ORACLE_TROAD_PASSWORD:-test}@localhost:1521/ORCL2 <<'EOSQL'
SET HEADING OFF
SET FEEDBACK OFF
SET PAGESIZE 0
SELECT COUNT(*) FROM TROAD_APP.V_ROUTE_NEW_NM;
EXIT
EOSQL" 2>/dev/null | tr -dc '0-9')"
if [[ -n "$rows" && "$rows" -gt 0 && -n "$route_rows" && "$route_rows" -gt 0 ]]; then
log "✅ TROAD 교통정보 뷰 확인 (V_INCIDENT_FTMS ${rows}건, V_ROUTE_NEW_NM ${route_rows}건)"
return 0
fi
log "TROAD 교통정보 뷰/데이터 적용 (oracle/apply-sql.sh)..."
"$apply" >/dev/null 2>&1 \
&& log "✅ TROAD 교통정보 뷰 적용 완료" \
|| warn "TROAD 스키마 적용 실패 — server-dev/oracle/apply-sql.sh 를 직접 실행해 확인하세요"
}
ensure_oracle() {
if $SKIP_ORACLE; then
log "Oracle TROAD 기동 생략 (--skip-oracle)"
return 0
fi
[[ -f "${COMPOSE_ORACLE}" ]] || fail "server-dev/docker-compose.oracle.yml 없음"
# 이미 다른 프로세스가 1521 을 쓰는 경우(비-Oracle 컨테이너)만 경고
if ! oracle_container_running && lsof -iTCP:1521 -sTCP:LISTEN >/dev/null 2>&1; then
if docker ps --format '{{.Names}} {{.Ports}}' 2>/dev/null | grep -qE '1521'; then
log "Oracle :1521 이미 Docker 로 사용 중 — 기존 인스턴스 재사용"
wait_oracle_ready 120 && ensure_troad_schema || true
return 0
fi
warn "호스트 :1521 이 이미 점유됨 — TROAD Oracle 기동 실패 가능"
fi
log "Oracle TROAD 기동 (docker-compose.oracle.yml)..."
(
cd "${SERVER_DEV_DIR}"
docker compose -f docker-compose.oracle.yml up -d
) || fail "Oracle TROAD docker compose up 실패"
if wait_oracle_ready 360; then
ensure_troad_schema
else
warn "Oracle 미준비 — chatbotApi TROAD 조회가 실패할 수 있음"
fi
}
bootstrap_qdrant_if_empty() {
local collection="${QDRANT_COLLECTION:-qa_vectors_v2}"
if [[ -f "${RAG_ENV}" ]]; then
@@ -590,6 +680,7 @@ log "exdev 서버 모드"
stop_legacy_stack
ensure_host_ai
ensure_mongo
ensure_oracle
start_rag
if ! $SKIP_JAVA; then
@@ -623,8 +714,9 @@ log " HTTPS UI ${PUBLIC_BASE_URL}/chatbot/ai/"
log " RAG http://127.0.0.1:${RAG_PORT}/health"
log " Admin http://127.0.0.1:${ADMIN_PORT}/"
log " WAS http://127.0.0.1:${WAS_PORT}/"
log " Skill http://127.0.0.1:${SKILL_PORT}/web/ask"
log " Kakao ${PUBLIC_BASE_URL}/kakao/skill"
log " Skill http://127.0.0.1:${SKILL_PORT}/web/ask"
log " Oracle localhost:1521/orcl2 (OPR_MAIN / TROAD)"
log " Kakao ${PUBLIC_BASE_URL}/kakao/skill"
log " 로그 ${LOG_DIR}/"
log " 종료 ./server-dev/stop-all-server.sh"
log "=========================================="