From 150b236ee8d027539aafcab64e0648a01ea561b7 Mon Sep 17 00:00:00 2001 From: htlee Date: Wed, 18 Mar 2026 06:29:28 +0900 Subject: [PATCH] =?UTF-8?q?fix(deploy):=20=ED=8F=B4=EB=A7=81=20=ED=83=80?= =?UTF-8?q?=EC=9D=B4=EB=A8=B8=EB=A1=9C=20=EB=B0=B1=EC=97=94=EB=93=9C=20?= =?UTF-8?q?=EC=9E=90=EB=8F=99=20=EC=9E=AC=EC=8B=9C=EC=9E=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Docker 컨테이너에서 nsenter/inotify 불가 → 30초 폴링 타이머로 변경 - kcg-backend-deploy.timer: 30초마다 JAR mtime 체크 - kcg-backend-deploy.service: JAR 갱신 감지 시 systemd 파일 교체 + restart - watcher.path(inotify 기반) 제거, deploy.timer(폴링 기반)로 교체 Co-Authored-By: Claude Opus 4.6 (1M context) --- .gitea/workflows/deploy.yml | 10 +++++----- deploy/kcg-backend-deploy.service | 23 +++++++++++++++++++++++ deploy/kcg-backend-deploy.timer | 9 +++++++++ 3 files changed, 37 insertions(+), 5 deletions(-) create mode 100644 deploy/kcg-backend-deploy.service create mode 100644 deploy/kcg-backend-deploy.timer diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index cbb5b55..58f718c 100644 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -75,12 +75,12 @@ jobs: echo "JAR 내부 application-prod.yml 감지 → 외부 파일 제거" fi - # systemd 서비스 파일 배포 (watcher가 반영) + # systemd 서비스/타이머 파일 배포 (호스트 타이머가 감지하여 반영) cp deploy/kcg-backend.service $DEPLOY_DIR/kcg-backend.service - cp deploy/kcg-backend-watcher.service $DEPLOY_DIR/kcg-backend-watcher.service - cp deploy/kcg-backend-watcher.path $DEPLOY_DIR/kcg-backend-watcher.path + cp deploy/kcg-backend-deploy.service $DEPLOY_DIR/kcg-backend-deploy.service + cp deploy/kcg-backend-deploy.timer $DEPLOY_DIR/kcg-backend-deploy.timer - # JAR 교체 + 재시작 트리거 + # JAR 교체 (호스트 타이머가 JAR mtime 변경 감지 → 자동 재시작) cp backend/target/kcg.jar $DEPLOY_DIR/kcg.jar - date '+%s' > $DEPLOY_DIR/.deploy-trigger echo "Backend deployed at $(date '+%Y-%m-%d %H:%M:%S')" + echo "Host timer will detect JAR update and restart within 30s" diff --git a/deploy/kcg-backend-deploy.service b/deploy/kcg-backend-deploy.service new file mode 100644 index 0000000..7308d33 --- /dev/null +++ b/deploy/kcg-backend-deploy.service @@ -0,0 +1,23 @@ +[Unit] +Description=Check and restart KCG Backend if JAR updated + +[Service] +Type=oneshot +ExecStart=/bin/bash -c '\ + DEPLOY_DIR=/devdata/services/kcg/backend; \ + JAR=$DEPLOY_DIR/kcg.jar; \ + MARKER=$DEPLOY_DIR/.last-restart; \ + [ ! -f "$JAR" ] && exit 0; \ + if [ "$JAR" -nt "$MARKER" ] 2>/dev/null || [ ! -f "$MARKER" ]; then \ + SYSTEMD_DIR=/etc/systemd/system; \ + CHANGED=0; \ + for f in kcg-backend.service kcg-backend-deploy.service kcg-backend-deploy.timer; do \ + if [ -f "$DEPLOY_DIR/$f" ] && ! diff -q "$DEPLOY_DIR/$f" "$SYSTEMD_DIR/$f" >/dev/null 2>&1; then \ + cp "$DEPLOY_DIR/$f" "$SYSTEMD_DIR/$f"; \ + CHANGED=1; \ + fi; \ + done; \ + [ "$CHANGED" = "1" ] && systemctl daemon-reload; \ + systemctl restart kcg-backend; \ + touch "$MARKER"; \ + fi' diff --git a/deploy/kcg-backend-deploy.timer b/deploy/kcg-backend-deploy.timer new file mode 100644 index 0000000..0bd18fd --- /dev/null +++ b/deploy/kcg-backend-deploy.timer @@ -0,0 +1,9 @@ +[Unit] +Description=Poll for KCG Backend deploy (JAR update check) + +[Timer] +OnBootSec=60 +OnUnitActiveSec=30 + +[Install] +WantedBy=timers.target