arko_renual/deploy/dev/06-runner-reregister.sh
URP2026 7d1182ecc3
All checks were successful
deploy-dev / deploy (push) Successful in 28s
배포 구조 문서화 및 runner 직결 재등록 스크립트 추가
runner를 nginx 경유(https://git.zioinfo.co.kr)로 등록하면 declare까지는 되는데
작업을 가져오지 않고 재기동해야만 처리하는 문제가 있었다. long-poll이 nginx의
proxy_buffering(기본 on)에 물리는 것으로 보인다. Gitea가 같은 서버에 있으므로
127.0.0.1:9003 직결로 재등록해 해결했고, 재발 시 쓰도록 스크립트로 남긴다.

deploy/README.md에 전체 구조(개발 WAS/DB 단일, 운영은 웹 티어 전용),
접속 방향이 양쪽으로 다른 이유(NAT), 키 제한 범위, 알려진 이슈를 정리했다.
2026-07-29 17:57:17 +09:00

44 lines
1.7 KiB
Bash

#!/usr/bin/env bash
# act_runner를 Gitea에 직접(127.0.0.1:9003) 붙도록 재등록한다.
#
# 문제: nginx(https://git.zioinfo.co.kr)를 경유해 등록하면 runner가 "declare successfully"
# 까지는 가는데 작업을 가져오지 않고, 재기동해야만 대기 중이던 작업을 집어간다.
# act_runner의 작업 수신은 long-poll인데 그 앞의 nginx가 proxy_buffering 기본값(on)과
# proxy_read_timeout 300s 로 서 있어 연결이 물린 채로 남는 것으로 보인다.
#
# 해결: runner와 Gitea가 같은 서버에 있으므로 nginx를 거칠 이유가 없다.
# 루프백으로 직접 붙이면 프록시 계층이 사라진다.
set -euo pipefail
RUNNER_DIR=/opt/arko-dev/runner
INSTANCE=http://127.0.0.1:9003
SCOPE=somang4819/arko_renual
GITEA_USER=$(stat -c %U /var/lib/gitea)
echo "=== 1. runner 중지 ==="
systemctl stop arko-dev-runner || true
echo "=== 2. 기존 등록 백업 ==="
TS=$(date +%Y%m%d_%H%M%S)
[ -f "$RUNNER_DIR/.runner" ] && mv "$RUNNER_DIR/.runner" "$RUNNER_DIR/.runner.bak_$TS" && echo "백업: .runner.bak_$TS"
echo "=== 3. 등록 토큰 발급 ==="
TOKEN=$(su - "$GITEA_USER" -s /bin/bash -c \
"gitea actions generate-runner-token --config /etc/gitea/app.ini --scope $SCOPE" 2>/dev/null | tr -d '\r\n ')
[ -n "$TOKEN" ] || { echo "토큰 발급 실패"; exit 1; }
echo "발급 완료"
echo "=== 4. 직접 연결로 재등록 ($INSTANCE) ==="
cd "$RUNNER_DIR"
/usr/local/bin/act_runner register --no-interactive \
--instance "$INSTANCE" \
--token "$TOKEN" \
--name arko-dev-runner \
--labels "arko-dev:host"
echo "=== 5. 기동 ==="
systemctl start arko-dev-runner
sleep 10
systemctl is-active arko-dev-runner
journalctl -u arko-dev-runner -n 8 --no-pager | tail -8