Deploy: exdev sync 2026-08-01 21:04:26
This commit is contained in:
@@ -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 "=========================================="
|
||||
|
||||
Reference in New Issue
Block a user