Deploy: GitHub submodule sync 2026-07-24 09:27:56
This commit is contained in:
+40
-7
@@ -1,11 +1,13 @@
|
|||||||
#!/usr/bin/env bash
|
#!/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 를 사용 (로컬 컨테이너 미기동)
|
# Mongo/Qdrant 는 stock.exdev.co.kr 를 사용 (로컬 컨테이너 미기동)
|
||||||
#
|
#
|
||||||
# ./local-dev/start-all.sh
|
# ./local-dev/start-all.sh
|
||||||
|
# ./start-all.sh # 루트 래퍼
|
||||||
# ./local-dev/start-all.sh --no-tunnel
|
# ./local-dev/start-all.sh --no-tunnel
|
||||||
# ./local-dev/start-all.sh --skip-java
|
# ./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
|
# 종료: ./local-dev/stop-all.sh
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
@@ -19,6 +21,7 @@ RAG_DIR="${ROOT_DIR}/exAiChatBot-chatbot2.0-agent"
|
|||||||
API_DIR="${ROOT_DIR}/chatbotApi-chatbot2.0-agent"
|
API_DIR="${ROOT_DIR}/chatbotApi-chatbot2.0-agent"
|
||||||
SKILL_DIR="${ROOT_DIR}/kakaoChatbotSkill-chatbot2.0-agent"
|
SKILL_DIR="${ROOT_DIR}/kakaoChatbotSkill-chatbot2.0-agent"
|
||||||
APP_DIR="${ROOT_DIR}/chatbotApp-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"
|
ENV_TEMPLATE="${LOCAL_DEV_DIR}/env.exdev-ai.template"
|
||||||
RAG_ENV="${RAG_DIR}/.env"
|
RAG_ENV="${RAG_DIR}/.env"
|
||||||
@@ -42,17 +45,19 @@ QDRANT_PORT="${QDRANT_PORT:-6333}"
|
|||||||
SKIP_TUNNEL=false
|
SKIP_TUNNEL=false
|
||||||
SKIP_JAVA=false
|
SKIP_JAVA=false
|
||||||
NO_BUILD=false
|
NO_BUILD=false
|
||||||
|
SKIP_DESKTOP=false
|
||||||
|
|
||||||
for arg in "$@"; do
|
for arg in "$@"; do
|
||||||
case "$arg" in
|
case "$arg" in
|
||||||
--no-tunnel) SKIP_TUNNEL=true ;;
|
--no-tunnel) SKIP_TUNNEL=true ;;
|
||||||
--skip-java) SKIP_JAVA=true ;;
|
--skip-java) SKIP_JAVA=true ;;
|
||||||
--no-build) NO_BUILD=true ;;
|
--no-build) NO_BUILD=true ;;
|
||||||
|
--skip-desktop) SKIP_DESKTOP=true ;;
|
||||||
--sync-qdrant)
|
--sync-qdrant)
|
||||||
echo "경고: 원격 Qdrant 사용 중이라 --sync-qdrant 는 무시됩니다."
|
echo "경고: 원격 Qdrant 사용 중이라 --sync-qdrant 는 무시됩니다."
|
||||||
;;
|
;;
|
||||||
-h|--help)
|
-h|--help)
|
||||||
sed -n '2,12p' "$0"
|
sed -n '2,14p' "$0"
|
||||||
exit 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; }
|
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 "${WAS_PORT}" "chatbotApi" 5 || ok=false
|
||||||
wait_port "${SKILL_PORT}" "kakaoChatbotSkill" 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
|
if $ok; then
|
||||||
log "✅ 전체 스택 정상"
|
log "✅ 전체 스택 정상"
|
||||||
@@ -298,6 +303,31 @@ verify_stack() {
|
|||||||
return 1
|
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 ──
|
# ── main ──
|
||||||
mkdir -p "${RUN_DIR}" "${LOG_DIR}"
|
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" \
|
"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/" \
|
"CHATBOT_API_BASE_URL=http://127.0.0.1:${WAS_PORT}/api/" \
|
||||||
"INTERNAL_TOOL_API_KEY=${INTERNAL_TOOL_API_KEY}" \
|
"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 "${WAS_PORT}" "chatbotApi" 240 || true
|
||||||
wait_port "${SKILL_PORT}" "kakaoChatbotSkill" 240 || true
|
wait_port "${SKILL_PORT}" "kakaoChatbotSkill" 240 || true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
build_chatbot_app
|
||||||
|
build_desktop_app
|
||||||
|
|
||||||
log "chatbotApp 기동..."
|
log "chatbotApp 기동..."
|
||||||
docker rm -f ex-chatbot-app-web 2>/dev/null || true
|
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
|
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 "기동 완료"
|
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 " RAG http://127.0.0.1:${RAG_PORT}/health"
|
||||||
log " Admin http://127.0.0.1:${ADMIN_PORT}/"
|
log " Admin http://127.0.0.1:${ADMIN_PORT}/"
|
||||||
log " Mongo ${EXDEV_DATA_HOST}:${MONGO_PORT} (원격, RAG+WAS)"
|
log " Mongo ${EXDEV_DATA_HOST}:${MONGO_PORT} (원격, RAG+WAS)"
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
#
|
#
|
||||||
# ./server-dev/start-all-server.sh
|
# ./server-dev/start-all-server.sh
|
||||||
# ./server-dev/start-all-server.sh --no-build
|
# ./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-java
|
||||||
# ./server-dev/start-all-server.sh --skip-legacy-stop
|
# ./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-pull # git 동기화 생략
|
||||||
@@ -23,6 +24,7 @@ RAG_DIR="${ROOT_DIR}/exAiChatBot-chatbot2.0-agent"
|
|||||||
API_DIR="${ROOT_DIR}/chatbotApi-chatbot2.0-agent"
|
API_DIR="${ROOT_DIR}/chatbotApi-chatbot2.0-agent"
|
||||||
SKILL_DIR="${ROOT_DIR}/kakaoChatbotSkill-chatbot2.0-agent"
|
SKILL_DIR="${ROOT_DIR}/kakaoChatbotSkill-chatbot2.0-agent"
|
||||||
APP_DIR="${ROOT_DIR}/chatbotApp-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"
|
ENV_TEMPLATE="${SERVER_DEV_DIR}/env.exdev-server.template"
|
||||||
RAG_ENV="${RAG_DIR}/.env"
|
RAG_ENV="${RAG_DIR}/.env"
|
||||||
@@ -47,6 +49,7 @@ NO_BUILD=false
|
|||||||
SKIP_JAVA=false
|
SKIP_JAVA=false
|
||||||
SKIP_LEGACY_STOP=false
|
SKIP_LEGACY_STOP=false
|
||||||
SKIP_CADDY=false
|
SKIP_CADDY=false
|
||||||
|
SKIP_DESKTOP=false
|
||||||
NO_PULL=false
|
NO_PULL=false
|
||||||
NO_PUSH=false
|
NO_PUSH=false
|
||||||
LOCAL_DEV=false
|
LOCAL_DEV=false
|
||||||
@@ -58,11 +61,12 @@ for arg in "$@"; do
|
|||||||
--skip-java) SKIP_JAVA=true ;;
|
--skip-java) SKIP_JAVA=true ;;
|
||||||
--skip-legacy-stop) SKIP_LEGACY_STOP=true ;;
|
--skip-legacy-stop) SKIP_LEGACY_STOP=true ;;
|
||||||
--skip-caddy) SKIP_CADDY=true ;;
|
--skip-caddy) SKIP_CADDY=true ;;
|
||||||
|
--skip-desktop) SKIP_DESKTOP=true ;;
|
||||||
--no-pull) NO_PULL=true ;;
|
--no-pull) NO_PULL=true ;;
|
||||||
--no-push) NO_PUSH=true ;;
|
--no-push) NO_PUSH=true ;;
|
||||||
--local) LOCAL_DEV=true ;;
|
--local) LOCAL_DEV=true ;;
|
||||||
-h|--help)
|
-h|--help)
|
||||||
sed -n '2,12p' "$0"
|
sed -n '2,14p' "$0"
|
||||||
exit 0
|
exit 0
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
@@ -165,6 +169,20 @@ build_chatbot_app_for_deploy() {
|
|||||||
bash "${APP_DIR}/build.sh"
|
bash "${APP_DIR}/build.sh"
|
||||||
[[ -f "${APP_DIR}/public/index.html" ]] || fail "chatbotApp public/ 빌드 실패"
|
[[ -f "${APP_DIR}/public/index.html" ]] || fail "chatbotApp public/ 빌드 실패"
|
||||||
[[ -f "${APP_DIR}/public-ai/index.html" ]] || fail "chatbotApp public-ai/ 빌드 실패"
|
[[ -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() {
|
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}/server-dev/"*.sh 2>/dev/null || true
|
||||||
chmod +x "${tree}/git_fetch_all.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}/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() {
|
is_exdev_server() {
|
||||||
@@ -236,6 +255,7 @@ run_local_dev() {
|
|||||||
local -a args=()
|
local -a args=()
|
||||||
$NO_BUILD && args+=(--no-build)
|
$NO_BUILD && args+=(--no-build)
|
||||||
$SKIP_JAVA && args+=(--skip-java)
|
$SKIP_JAVA && args+=(--skip-java)
|
||||||
|
$SKIP_DESKTOP && args+=(--skip-desktop)
|
||||||
if ((${#args[@]} > 0)); then
|
if ((${#args[@]} > 0)); then
|
||||||
exec "${ROOT_DIR}/local-dev/start-all.sh" "${args[@]}"
|
exec "${ROOT_DIR}/local-dev/start-all.sh" "${args[@]}"
|
||||||
else
|
else
|
||||||
@@ -437,6 +457,7 @@ build_chatbot_app() {
|
|||||||
npm ci --prefer-offline 2>/dev/null || npm install
|
npm ci --prefer-offline 2>/dev/null || npm install
|
||||||
)
|
)
|
||||||
bash "${APP_DIR}/build.sh"
|
bash "${APP_DIR}/build.sh"
|
||||||
|
build_desktop_app
|
||||||
}
|
}
|
||||||
|
|
||||||
start_chatbot_app() {
|
start_chatbot_app() {
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ SUBMODULES=(
|
|||||||
chatbotApi-chatbot2.0-agent
|
chatbotApi-chatbot2.0-agent
|
||||||
exAiChatBot-chatbot2.0-agent
|
exAiChatBot-chatbot2.0-agent
|
||||||
kakaoChatbotSkill-chatbot2.0-agent
|
kakaoChatbotSkill-chatbot2.0-agent
|
||||||
|
chatbotDesktopApp-chatbot2.0
|
||||||
)
|
)
|
||||||
|
|
||||||
log "원격 동기화: ${EXDEV_SSH}:${REMOTE_WT}"
|
log "원격 동기화: ${EXDEV_SSH}:${REMOTE_WT}"
|
||||||
@@ -25,6 +26,7 @@ for path in "${SUBMODULES[@]}"; do
|
|||||||
rsync -az --delete \
|
rsync -az --delete \
|
||||||
--exclude 'node_modules/' \
|
--exclude 'node_modules/' \
|
||||||
--exclude 'build/' \
|
--exclude 'build/' \
|
||||||
|
--exclude 'dist/' \
|
||||||
--exclude '.gradle/' \
|
--exclude '.gradle/' \
|
||||||
--exclude 'qdrant_data/' \
|
--exclude 'qdrant_data/' \
|
||||||
--exclude 'logs/' \
|
--exclude 'logs/' \
|
||||||
|
|||||||
Reference in New Issue
Block a user