Deploy: GitHub submodule sync 2026-07-24 09:27:56

This commit is contained in:
Macbook
2026-07-24 09:27:56 +09:00
parent 3df4398618
commit 6aa99f3d6d
3 changed files with 65 additions and 9 deletions
+40 -7
View File
@@ -1,11 +1,13 @@
#!/usr/bin/env bash
# 로컬 전체 스택 기동 (exdev AI SSH 터널 + 원격 Mongo/Qdrant + RAG + WAS + Skill + chatbotApp)
# 로컬 전체 스택 기동 (exdev AI SSH 터널 + 원격 Mongo/Qdrant + RAG + WAS + Skill + chatbotApp + Desktop)
# Mongo/Qdrant 는 stock.exdev.co.kr 를 사용 (로컬 컨테이너 미기동)
#
# ./local-dev/start-all.sh
# ./start-all.sh # 루트 래퍼
# ./local-dev/start-all.sh --no-tunnel
# ./local-dev/start-all.sh --skip-java
# ./local-dev/start-all.sh --no-build
# ./local-dev/start-all.sh --no-build # RAG/웹/데스크톱 빌드 생략
# ./local-dev/start-all.sh --skip-desktop # Electron 재빌드만 생략
#
# 종료: ./local-dev/stop-all.sh
set -euo pipefail
@@ -19,6 +21,7 @@ RAG_DIR="${ROOT_DIR}/exAiChatBot-chatbot2.0-agent"
API_DIR="${ROOT_DIR}/chatbotApi-chatbot2.0-agent"
SKILL_DIR="${ROOT_DIR}/kakaoChatbotSkill-chatbot2.0-agent"
APP_DIR="${ROOT_DIR}/chatbotApp-chatbot2.0-agent"
DESKTOP_DIR="${ROOT_DIR}/chatbotDesktopApp-chatbot2.0"
ENV_TEMPLATE="${LOCAL_DEV_DIR}/env.exdev-ai.template"
RAG_ENV="${RAG_DIR}/.env"
@@ -42,17 +45,19 @@ QDRANT_PORT="${QDRANT_PORT:-6333}"
SKIP_TUNNEL=false
SKIP_JAVA=false
NO_BUILD=false
SKIP_DESKTOP=false
for arg in "$@"; do
case "$arg" in
--no-tunnel) SKIP_TUNNEL=true ;;
--skip-java) SKIP_JAVA=true ;;
--no-build) NO_BUILD=true ;;
--skip-desktop) SKIP_DESKTOP=true ;;
--sync-qdrant)
echo "경고: 원격 Qdrant 사용 중이라 --sync-qdrant 는 무시됩니다."
;;
-h|--help)
sed -n '2,12p' "$0"
sed -n '2,14p' "$0"
exit 0
;;
*)
@@ -288,7 +293,7 @@ verify_stack() {
curl -sf "http://127.0.0.1:${RAG_PORT}/health" | grep -q '"status"' || { log "❌ RAG health"; ok=false; }
wait_port "${WAS_PORT}" "chatbotApi" 5 || ok=false
wait_port "${SKILL_PORT}" "kakaoChatbotSkill" 5 || ok=false
curl -sf "http://127.0.0.1:${APP_PORT}/chatbot/app/" | grep -q 'data-chatbot-app' || { log "❌ chatbotApp UI"; ok=false; }
curl -sf "http://127.0.0.1:${APP_PORT}/chatbot/ai/" | grep -q 'data-chatbot-app' || { log "❌ chatbotApp UI"; ok=false; }
if $ok; then
log "✅ 전체 스택 정상"
@@ -298,6 +303,31 @@ verify_stack() {
return 1
}
build_chatbot_app() {
if $NO_BUILD && [[ -f "${APP_DIR}/public-ai/index.html" ]]; then
log "chatbotApp 빌드 생략 (--no-build)"
return 0
fi
log "chatbotApp Next.js 빌드 (수정사항 반영)..."
(
cd "${APP_DIR}/web"
npm ci --prefer-offline 2>/dev/null || npm install
)
bash "${APP_DIR}/build.sh"
[[ -f "${APP_DIR}/public-ai/index.html" ]] || fail "chatbotApp public-ai/ 빌드 실패"
}
build_desktop_app() {
if $NO_BUILD || $SKIP_DESKTOP; then
log "데스크톱 앱 빌드 생략 (--no-build/--skip-desktop)"
return 0
fi
[[ -d "${DESKTOP_DIR}" ]] || fail "데스크톱 앱 디렉터리 없음: ${DESKTOP_DIR}"
chmod +x "${DESKTOP_DIR}/build-and-publish.sh"
# 로컬은 Mac 위주 — Windows 크로스빌드는 시간이 길어 SKIP_WIN 기본 1 (서버 배포는 Win 포함)
SKIP_WIN="${SKIP_WIN:-1}" bash "${DESKTOP_DIR}/build-and-publish.sh"
}
# ── main ──
mkdir -p "${RUN_DIR}" "${LOG_DIR}"
@@ -332,12 +362,15 @@ if ! $SKIP_JAVA; then
"RAG_AGENT_CHAT_URL=http://127.0.0.1:${RAG_PORT}/agent/chat" \
"CHATBOT_API_BASE_URL=http://127.0.0.1:${WAS_PORT}/api/" \
"INTERNAL_TOOL_API_KEY=${INTERNAL_TOOL_API_KEY}" \
"CHATBOT_APP_URL=http://localhost:${APP_PORT}/chatbot/app/"
"CHATBOT_APP_URL=http://localhost:${APP_PORT}/chatbot/ai/"
wait_port "${WAS_PORT}" "chatbotApi" 240 || true
wait_port "${SKILL_PORT}" "kakaoChatbotSkill" 240 || true
fi
build_chatbot_app
build_desktop_app
log "chatbotApp 기동..."
docker rm -f ex-chatbot-app-web 2>/dev/null || true
(
@@ -347,11 +380,11 @@ docker rm -f ex-chatbot-app-web 2>/dev/null || true
docker compose up -d --force-recreate
)
wait_http "http://127.0.0.1:${APP_PORT}/chatbot/app/" "chatbotApp UI" 30 || true
wait_http "http://127.0.0.1:${APP_PORT}/chatbot/ai/" "chatbotApp UI" 30 || true
log "=========================================="
log "기동 완료"
log " UI http://127.0.0.1:${APP_PORT}/chatbot/app/"
log " UI http://127.0.0.1:${APP_PORT}/chatbot/ai/"
log " RAG http://127.0.0.1:${RAG_PORT}/health"
log " Admin http://127.0.0.1:${ADMIN_PORT}/"
log " Mongo ${EXDEV_DATA_HOST}:${MONGO_PORT} (원격, RAG+WAS)"
+23 -2
View File
@@ -3,6 +3,7 @@
#
# ./server-dev/start-all-server.sh
# ./server-dev/start-all-server.sh --no-build
# ./server-dev/start-all-server.sh --skip-desktop
# ./server-dev/start-all-server.sh --skip-java
# ./server-dev/start-all-server.sh --skip-legacy-stop
# ./server-dev/start-all-server.sh --no-pull # git 동기화 생략
@@ -23,6 +24,7 @@ RAG_DIR="${ROOT_DIR}/exAiChatBot-chatbot2.0-agent"
API_DIR="${ROOT_DIR}/chatbotApi-chatbot2.0-agent"
SKILL_DIR="${ROOT_DIR}/kakaoChatbotSkill-chatbot2.0-agent"
APP_DIR="${ROOT_DIR}/chatbotApp-chatbot2.0-agent"
DESKTOP_DIR="${ROOT_DIR}/chatbotDesktopApp-chatbot2.0"
ENV_TEMPLATE="${SERVER_DEV_DIR}/env.exdev-server.template"
RAG_ENV="${RAG_DIR}/.env"
@@ -47,6 +49,7 @@ NO_BUILD=false
SKIP_JAVA=false
SKIP_LEGACY_STOP=false
SKIP_CADDY=false
SKIP_DESKTOP=false
NO_PULL=false
NO_PUSH=false
LOCAL_DEV=false
@@ -58,11 +61,12 @@ for arg in "$@"; do
--skip-java) SKIP_JAVA=true ;;
--skip-legacy-stop) SKIP_LEGACY_STOP=true ;;
--skip-caddy) SKIP_CADDY=true ;;
--skip-desktop) SKIP_DESKTOP=true ;;
--no-pull) NO_PULL=true ;;
--no-push) NO_PUSH=true ;;
--local) LOCAL_DEV=true ;;
-h|--help)
sed -n '2,12p' "$0"
sed -n '2,14p' "$0"
exit 0
;;
*)
@@ -165,6 +169,20 @@ build_chatbot_app_for_deploy() {
bash "${APP_DIR}/build.sh"
[[ -f "${APP_DIR}/public/index.html" ]] || fail "chatbotApp public/ 빌드 실패"
[[ -f "${APP_DIR}/public-ai/index.html" ]] || fail "chatbotApp public-ai/ 빌드 실패"
build_desktop_app
}
build_desktop_app() {
if $NO_BUILD || $SKIP_DESKTOP; then
log "데스크톱 앱 빌드 생략 (--no-build/--skip-desktop)"
return 0
fi
[[ -d "${DESKTOP_DIR}" ]] || fail "데스크톱 앱 디렉터리 없음: ${DESKTOP_DIR}"
chmod +x "${DESKTOP_DIR}/build-and-publish.sh"
log "chatbotDesktopApp Electron 재빌드 + downloads 배포..."
# 서버/원격 배포용: Mac + Windows 모두 생성
SKIP_WIN="${SKIP_WIN:-0}" SKIP_MAC="${SKIP_MAC:-0}" \
bash "${DESKTOP_DIR}/build-and-publish.sh"
}
deploy_from_local_mac() {
@@ -223,7 +241,8 @@ sync_source_from_git() {
chmod +x "${tree}/server-dev/"*.sh 2>/dev/null || true
chmod +x "${tree}/git_fetch_all.sh" 2>/dev/null || true
chmod +x "${tree}/chatbotApp-chatbot2.0-agent/build.sh" 2>/dev/null || true
chmod +x "${tree}/start-all-server.sh" "${tree}/stop-all-server.sh" 2>/dev/null || true
chmod +x "${tree}/chatbotDesktopApp-chatbot2.0/build-and-publish.sh" 2>/dev/null || true
chmod +x "${tree}/start-all-server.sh" "${tree}/stop-all-server.sh" "${tree}/start-all.sh" 2>/dev/null || true
}
is_exdev_server() {
@@ -236,6 +255,7 @@ run_local_dev() {
local -a args=()
$NO_BUILD && args+=(--no-build)
$SKIP_JAVA && args+=(--skip-java)
$SKIP_DESKTOP && args+=(--skip-desktop)
if ((${#args[@]} > 0)); then
exec "${ROOT_DIR}/local-dev/start-all.sh" "${args[@]}"
else
@@ -437,6 +457,7 @@ build_chatbot_app() {
npm ci --prefer-offline 2>/dev/null || npm install
)
bash "${APP_DIR}/build.sh"
build_desktop_app
}
start_chatbot_app() {
+2
View File
@@ -14,6 +14,7 @@ SUBMODULES=(
chatbotApi-chatbot2.0-agent
exAiChatBot-chatbot2.0-agent
kakaoChatbotSkill-chatbot2.0-agent
chatbotDesktopApp-chatbot2.0
)
log "원격 동기화: ${EXDEV_SSH}:${REMOTE_WT}"
@@ -25,6 +26,7 @@ for path in "${SUBMODULES[@]}"; do
rsync -az --delete \
--exclude 'node_modules/' \
--exclude 'build/' \
--exclude 'dist/' \
--exclude '.gradle/' \
--exclude 'qdrant_data/' \
--exclude 'logs/' \