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:
Executable
+104
@@ -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 "완료"
|
||||
Reference in New Issue
Block a user