Deploy: exdev sync 2026-08-11 22:30:48

This commit is contained in:
Macbook
2026-08-11 22:30:48 +09:00
parent 42fa743d7a
commit 27056073da
4 changed files with 56 additions and 7 deletions
+26 -3
View File
@@ -11,8 +11,9 @@
# ./git_fetch_all.sh --no-commit # fetch/merge만 (commit·push 생략)
#
# ★ 운영(GitHub) push 전용 — 개발서버(exdev) 주소를 커밋/push 하지 않는다.
# start-all-server.sh 가 런타임 ENV 로만 exdev(127.0.0.1 / host.docker.internal)를 적용한다.
# 이 스크립트는 commit 직전에 운영 기본값(172.16.180.130)을 파일에 복원한 뒤 push 한다.
# start-all-server.sh 가 런타임 ENV 로만 exdev(127.0.0.1 Mongo / localhost Oracle TROAD /
# host.docker.internal RAG)를 적용한다.
# 이 스크립트는 commit 직전에 운영 기본값(172.16.*)을 파일에 복원한 뒤 push 한다.
# (.env / EXDEV_LOCAL / server-dev 오버레이는 GitHub 대상이 아님)
#
# 대상 (.gitmodules) — 모두 branch=chatbot2.0-agent (main 사용 안 함):
@@ -122,6 +123,10 @@ PROD_WAS_HOST="172.16.180.130"
PROD_WAS_API="http://${PROD_WAS_HOST}:8086/api"
PROD_RAG_CHAT="http://${PROD_WAS_HOST}:28012/agent/chat"
PROD_MONGO_URI="mongodb://exDev:ehfhrhdtk!!@${PROD_WAS_HOST}:27017/chatbot?heartbeatFrequencyMS=30000&minPoolSize=8&maxIdleTimeMS=18000000"
# 운영 TROAD Oracle (start-all 은 SPRING_DATASOURCE_TROAD_* ENV 로 localhost 오버라이드)
PROD_TROAD_JDBC_URL="jdbc:oracle:thin:@172.16.163.76:1522/TROAD"
PROD_TROAD_USERNAME="TROAD_APP"
PROD_TROAD_PASSWORD='!ryxhdapp2025'
restore_production_endpoints_before_commit() {
local path="$1"
@@ -135,6 +140,15 @@ restore_production_endpoints_before_commit() {
# URI 의 @ 는 perl 치환부 배열 보간을 피하기 위해 ENV 로 전달
PROD_MONGO_URI="${PROD_MONGO_URI}" perl -i -pe \
's|uri:\s*mongodb://\S+|uri: $ENV{PROD_MONGO_URI}|g' "${yml}"
# troad datasource 를 로컬 Oracle 로 바꿔 둔 경우 운영값 복원
PROD_TROAD_JDBC_URL="${PROD_TROAD_JDBC_URL}" \
PROD_TROAD_USERNAME="${PROD_TROAD_USERNAME}" \
PROD_TROAD_PASSWORD="${PROD_TROAD_PASSWORD}" \
perl -i -0pe '
s|(troad:\s*\n(?:[ \t]+[^\n]*\n)*?[ \t]+url:\s*)\S+|$1$ENV{PROD_TROAD_JDBC_URL}|g;
s|(troad:\s*\n(?:[ \t]+[^\n]*\n)*?[ \t]+username:\s*)\S+|$1$ENV{PROD_TROAD_USERNAME}|g;
s|(troad:\s*\n(?:[ \t]+[^\n]*\n)*?[ \t]+password:\s*).*|$1"$ENV{PROD_TROAD_PASSWORD}"|g;
' "${yml}"
fi
;;
kakaoChatbotSkill-chatbot2.0-agent)
@@ -189,8 +203,17 @@ assert_no_exdev_endpoints_for_push() {
case "${path}" in
chatbotApi-chatbot2.0-agent)
hits="$(grep -nE 'mongodb://(127\.0\.0\.1|localhost)|host\.docker\.internal' \
hits="$(grep -nE 'mongodb://(127\.0\.0\.1|localhost)|host\.docker\.internal|jdbc:oracle:thin:@(127\.0\.0\.1|localhost)' \
"${dir}/src/main/resources/application.yml" 2>/dev/null || true)"
# troad 블록이 로컬 계정(OPR_MAIN)으로 바뀌었는지도 차단
if awk '
/^[[:space:]]*troad:[[:space:]]*$/ { in_troad=1; next }
in_troad && /^[[:space:]]*[a-zA-Z0-9_-]+:[[:space:]]*$/ && $0 !~ /^[[:space:]]*troad:/ { in_troad=0 }
in_troad && /username:[[:space:]]*OPR_MAIN/ { found=1 }
END { exit found ? 0 : 1 }
' "${dir}/src/main/resources/application.yml" 2>/dev/null; then
hits+=$'\n'"troad.username=OPR_MAIN (exdev local Oracle — must not commit)"
fi
;;
kakaoChatbotSkill-chatbot2.0-agent)
hits="$(grep -nE '127\.0\.0\.1:(8086|28012)|host\.docker\.internal:(8086|28012)' \
+4 -1
View File
@@ -127,7 +127,10 @@ cd /Users/aidev/dev/exAichatbot_agent
- Docker Compose: `server-dev/docker-compose.oracle.yml` (`gvenzl/oracle-free:23-slim`, arm64 지원)
- 상세: [`server-dev/oracle/README.md`](oracle/README.md)
- `start-all-server.sh` 기동 시 자동 시작, `stop-all-server.sh` 중지 시 자동 중지(데이터 볼륨 유지)
- `start-all-server.sh` 기동 시 Oracle 컨테이너 자동 시작 + WAS에
`SPRING_DATASOURCE_TROAD_URL/USERNAME/PASSWORD` 를 **localhost** 로 ENV 주입
(`application.yml` 운영 172.16.163.76 값은 파일에 그대로 둠 — `git_fetch_all.sh` push 시 복원·검증)
- `stop-all-server.sh` 중지 시 자동 중지(데이터 볼륨 유지)
- 업무 객체는 `server-dev/oracle/sql/*.sql` — 기동 후 비어 있으면 `oracle/apply-sql.sh` 가 자동 적용
- `OPR_MAIN.V_INCIDENT_FTMS` (돌발/정체 교통정보, 샘플 124건)
- `TROAD_APP.V_ROUTE_NEW_NM` / `V_ROUTE_TRFC_VER001` / `TLISDEV.T_TRMB_CD_INFO01M1` (노선별 혼잡 — **기존 chatbotApi 조회 SQL 그대로**)
+4 -1
View File
@@ -13,7 +13,10 @@
| Container | `exaichatbot-agent-oracle-troad` |
| Volume | `exaichatbot-agent-oracle-troad-data` |
`chatbotApi-chatbot2.0-agent/src/main/resources/application.yml` 의 `spring.datasource.troad` 설정과 일치합니다.
`application.yml` 의 기본값은 운영 TROAD(`172.16.163.76`)를 유지합니다.
개발서버에서는 `start-all-server.sh` 가 아래 ENV 로만 localhost Oracle 을 주입합니다
(`SPRING_DATASOURCE_TROAD_URL` / `_USERNAME` / `_PASSWORD`).
`git_fetch_all.sh` 는 커밋 전 yml 을 운영값으로 되돌리므로 exdev 설정이 GitHub에 반영되지 않습니다.
개발서버가 Apple Silicon(arm64) 이므로 amd64 전용인 `gvenzl/oracle-xe:21` 대신
arm64 를 지원하는 `gvenzl/oracle-free:23-slim` 을 사용합니다.
+22 -2
View File
@@ -13,9 +13,10 @@
#
# ★ 개발서버(exdev) 주소/설정은 이 스크립트가 런타임 ENV 로만 적용한다.
# - WAS Mongo → 127.0.0.1 (SPRING_DATA_MONGODB_URI)
# - WAS TROAD Oracle → 127.0.0.1:1521/ORCL2 (SPRING_DATASOURCE_TROAD_*)
# - Skill → 로컬 WAS/RAG (CHATBOT_API_BASE_URL, RAG_AGENT_CHAT_URL)
# - RAG .env → host.docker.internal + EXDEV_LOCAL=true
# application.yml 등 커밋 파일은 운영 기본값(172.16.180.130)을 유지한다.
# application.yml 등 커밋 파일은 운영 기본값(172.16.*)을 유지한다.
# 공식 GitHub 반영은 ./git_fetch_all.sh 전용 (exdev 주소를 push 하지 않음).
#
# 로컬 Mac 실행 시: Gitea(exdev) 최신 merge → 현재 소스 commit/push → 원격 배포.
@@ -50,6 +51,10 @@ INTERNAL_TOOL_API_KEY="${INTERNAL_TOOL_API_KEY:-exdev-agent-tool-key}"
PUBLIC_BASE_URL="${PUBLIC_BASE_URL:-https://chatbot.exdev.co.kr}"
# exdev 전용 — 소스(application.yml)를 수정하지 않고 ENV 로만 주입
EXDEV_MONGO_URI="${EXDEV_MONGO_URI:-mongodb://127.0.0.1:27017/chatbot?heartbeatFrequencyMS=30000&minPoolSize=8&maxIdleTimeMS=18000000}"
# Docker Oracle (server-dev/docker-compose.oracle.yml) — 운영 172.16.163.76 대신 로컬
EXDEV_TROAD_JDBC_URL="${EXDEV_TROAD_JDBC_URL:-jdbc:oracle:thin:@127.0.0.1:1521/ORCL2}"
EXDEV_TROAD_USERNAME="${EXDEV_TROAD_USERNAME:-OPR_MAIN}"
EXDEV_TROAD_PASSWORD="${EXDEV_TROAD_PASSWORD:-${ORACLE_TROAD_PASSWORD:-test}}"
LLM_PORT="${LLM_PORT:-16000}"
EMBED_PORT="${EMBED_PORT:-16001}"
@@ -688,6 +693,18 @@ verify_stack() {
else
log "✅ chatbotApi domain tools OK"
fi
# TROAD Oracle 은 반드시 로컬 Docker(127.0.0.1:1521) — 운영 172.16.163.76 타임아웃 방지
if ! $SKIP_ORACLE && ! $SKIP_JAVA; then
local cong_code
cong_code="$(curl -sS -m 25 -o /tmp/exdev-cong.json -w '%{http_code}' \
"http://127.0.0.1:${WAS_PORT}/api/troad/congestion?routeName=%EA%B2%BD%EB%B6%80%EC%84%A0" 2>/dev/null || echo 000)"
if [[ "${cong_code}" != "200" ]] || ! grep -q '"status"[[:space:]]*:[[:space:]]*true' /tmp/exdev-cong.json 2>/dev/null; then
log "❌ TROAD 정체 조회 실패 (http=${cong_code}) — WAS 가 localhost Oracle 을 보는지 확인"
ok=false
else
log "✅ TROAD Oracle(localhost) congestion OK"
fi
fi
if $ok; then log "✅ 전체 스택 정상"; return 0; fi
log "⚠️ 일부 서비스 미응답 — ${LOG_DIR}/ 확인"
return 1
@@ -723,7 +740,7 @@ start_rag
if ! $SKIP_JAVA; then
ensure_java
# Skill 먼저 (WAS WEB tool 이 Skill data-portal 을 역호출)
log "exdev Java ENV: Skill→127.0.0.1 WAS/RAG, WAS Mongo→127.0.0.1 (소스 yml 미변경)"
log "exdev Java ENV: Skill→127.0.0.1 WAS/RAG, WAS Mongo/TROAD Oracle→127.0.0.1 (소스 yml 미변경)"
start_java_service "kakaoChatbotSkill" "${SKILL_DIR}" \
"${RUN_DIR}/kakao-skill.pid" "${LOG_DIR}/kakao-skill.log" \
"EXDEV_LOCAL=true" \
@@ -741,6 +758,9 @@ if ! $SKIP_JAVA; then
"RAG_SERVER_HOST=127.0.0.1" \
"RAG_SERVER_PORT=${RAG_PORT}" \
"SPRING_DATA_MONGODB_URI=${EXDEV_MONGO_URI}" \
"SPRING_DATASOURCE_TROAD_URL=${EXDEV_TROAD_JDBC_URL}" \
"SPRING_DATASOURCE_TROAD_USERNAME=${EXDEV_TROAD_USERNAME}" \
"SPRING_DATASOURCE_TROAD_PASSWORD=${EXDEV_TROAD_PASSWORD}" \
|| warn "chatbotApi 기동 실패"
fi