Agent 2.0 exdev 서버 배포 스택

- server-dev start/stop/deploy 및 Gitea push 자동 배포
- local-dev 로컬 개발 환경

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Macbook
2026-07-21 22:57:30 +09:00
commit 4b86b2a660
344 changed files with 45787 additions and 0 deletions
+104
View File
@@ -0,0 +1,104 @@
#!/usr/bin/env bash
# chatbot.exdev.co.kr — Agent 2.0 전체 스택 중지
#
# ./server-dev/stop-all-server.sh
# ./server-dev/stop-all-server.sh --keep-caddy
# ./server-dev/stop-all-server.sh --purge-mongo
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
SERVER_DEV_DIR="${ROOT_DIR}/server-dev"
RUN_DIR="${SERVER_DEV_DIR}/run"
RAG_DIR="${ROOT_DIR}/exAiChatBot-chatbot2.0-agent"
APP_DIR="${ROOT_DIR}/chatbotApp-chatbot2.0-agent"
COMPOSE_SERVER="${RAG_DIR}/docker-compose.server.yml"
COMPOSE_CADDY="${SERVER_DEV_DIR}/docker-compose.caddy.yml"
MONGO_CONTAINER="${MONGO_CONTAINER:-exaichatbot-agent-mongo}"
LEGACY_STACK_DIR="${LEGACY_STACK_DIR:-/Users/aidev/dev/exAIChatbot2.0}"
KEEP_CADDY=false
PURGE_MONGO=false
STOP_HOST_AI=false
for arg in "$@"; do
case "$arg" in
--keep-caddy) KEEP_CADDY=true ;;
--purge-mongo) PURGE_MONGO=true ;;
--stop-host-ai) STOP_HOST_AI=true ;;
-h|--help)
sed -n '2,8p' "$0"
exit 0
;;
esac
done
export PATH="/opt/homebrew/bin:/usr/local/bin:/Applications/Docker.app/Contents/Resources/bin:${PATH}"
log() { echo "[$(date '+%H:%M:%S')] $*"; }
stop_pid_file() {
local name="$1" pid_file="$2"
[[ -f "${pid_file}" ]] || return 0
local pid
pid="$(cat "${pid_file}")"
if kill -0 "$pid" 2>/dev/null; then
log "${name} 종료 (PID ${pid})"
kill "$pid" 2>/dev/null || true
sleep 2
kill -9 "$pid" 2>/dev/null || true
fi
rm -f "${pid_file}"
}
stop_port() {
local port="$1"
local pids
pids="$(lsof -tiTCP:"${port}" -sTCP:LISTEN 2>/dev/null || true)"
if [[ -n "${pids}" ]]; then
log ":${port} 점유 프로세스 종료"
kill ${pids} 2>/dev/null || true
sleep 1
kill -9 ${pids} 2>/dev/null || true
fi
}
log "Agent 2.0 스택 중지..."
stop_pid_file "chatbotApi" "${RUN_DIR}/chatbot-api.pid"
stop_pid_file "kakaoChatbotSkill" "${RUN_DIR}/kakao-skill.pid"
for port in 8086 8083; do stop_port "${port}"; done
if [[ -d "${APP_DIR}" ]]; then
docker rm -f ex-chatbot-app-web 2>/dev/null || true
(cd "${APP_DIR}" && docker compose down --remove-orphans 2>/dev/null) || true
log "chatbotApp 중지"
fi
if [[ -f "${COMPOSE_SERVER}" ]]; then
(cd "${RAG_DIR}" && docker compose -f "${COMPOSE_SERVER}" down --remove-orphans 2>/dev/null) || true
log "RAG/Qdrant/Admin 중지"
fi
if ! $KEEP_CADDY && [[ -f "${COMPOSE_CADDY}" ]]; then
(cd "${SERVER_DEV_DIR}" && docker compose -f docker-compose.caddy.yml down --remove-orphans 2>/dev/null) || true
docker rm -f exaichatbot-agent-caddy 2>/dev/null || true
log "Caddy(HTTPS) 중지"
fi
if $PURGE_MONGO; then
docker stop "${MONGO_CONTAINER}" 2>/dev/null || true
docker rm -f "${MONGO_CONTAINER}" 2>/dev/null || true
log "MongoDB 컨테이너 삭제 (${MONGO_CONTAINER})"
else
docker stop "${MONGO_CONTAINER}" 2>/dev/null || true
log "MongoDB 중지 (${MONGO_CONTAINER})"
fi
if $STOP_HOST_AI && [[ -f "${LEGACY_STACK_DIR}/scripts/exdev/stop-host-ai.sh" ]]; then
bash "${LEGACY_STACK_DIR}/scripts/exdev/stop-host-ai.sh" || true
log "호스트 AI 중지"
fi
log "완료"