#!/bin/bash # GUARDiA ITSM 자동 배포 스크립트 (Deploy Webhook / CI 트리거 시 실행) # 경로: /opt/guardia/app/deploy/guardia_deploy.sh set -euo pipefail LOG=/opt/guardia/logs/deploy.log APP=/opt/guardia/app REPO=http://zio:Zio%40Admin2026%21@localhost:3000/zio/guardia-itsm.git SRC=/opt/guardia/src echo "[$(date '+%Y-%m-%d %H:%M:%S')] === GUARDiA 배포 시작 ===" >> $LOG # 1. 소스 갱신 if [ ! -d "$SRC/.git" ]; then echo "[$(date)] git clone..." >> $LOG git clone $REPO $SRC else echo "[$(date)] git pull..." >> $LOG cd $SRC && git pull origin main fi echo "[$(date)] 소스 갱신 완료" >> $LOG # 2. 새 파일 복사 (test_, __pycache__ 제외) rsync -av --exclude="__pycache__" --exclude="test_*.py" \ --exclude="*.db" --exclude="*.bak" --exclude=".git" \ $SRC/ $APP/ >> $LOG 2>&1 echo "[$(date)] 파일 복사 완료" >> $LOG # 3. 패키지 업데이트 if [ -f "$SRC/requirements.txt" ]; then /opt/guardia/venv/bin/pip install -r $SRC/requirements.txt -q >> $LOG 2>&1 echo "[$(date)] 패키지 업데이트 완료" >> $LOG fi # 4. 서비스 재시작 systemctl restart guardia sleep 5 # 5. 헬스체크 HTTP=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:8001/docs 2>/dev/null) if [ "$HTTP" = "200" ]; then echo "[$(date)] 배포 성공 (HTTP $HTTP)" >> $LOG else echo "[$(date)] 배포 실패 (HTTP $HTTP)" >> $LOG exit 1 fi echo "[$(date)] === GUARDiA 배포 완료 ===" >> $LOG