게시판오목 Next.js 웹과 VLM 착수 API 연결하기예제 소스

예제 소스

오목 Next.js 웹과 VLM 착수 API 연결하기 · 파일 59개

fix_bad_gateway.sh

#!/usr/bin/env bash
# 502 Bad Gateway 복구: 터널(18080/81/82) + omook nginx + 로컬 Next 점검
# Mac 터미널에서 실행:
#   bash ~/project

set -euo pipefail

export PATH="$HOME/.nvm/versions/node/v24.14.1/bin:/opt/homebrew/bin:/usr/local/bin:$PATH"
OMOOK="$(cd "$(dirname "$0")/.." && pwd)"
GO="$(cd "$OMOOK/../go" && pwd)"

echo "== local backends =="
for p in 3000 3001 3002 9299 9320; do
  if lsof -nP -iTCP:$p -sTCP:LISTEN >/dev/null 2>&1; then
    echo "  :$p LISTEN"
  else
    echo "  :$p DOWN"
  fi
done

# baduk Next 없으면 기동 시도
if ! lsof -nP -iTCP:3000 -sTCP:LISTEN >/dev/null 2>&1; then
  echo "== start baduk Next :3000 =="
  if [[ -x "$GO/mariago-web/node_modules/.bin/next" ]]; then
    (cd "$GO/mariago-web" && nohup npm run start >>"$GO/logs/mariago_ssh_tunnel/baduk.next.log" 2>&1 &) || \
    (cd "$GO/mariago-web" && nohup npm run dev >>"$GO/logs/mariago_ssh_tunnel/baduk.next.log" 2>&1 &)
    sleep 3
  else
    echo "  skip: mariago-web not ready"
  fi
fi

# omook Next
if ! lsof -nP -iTCP:3002 -sTCP:LISTEN >/dev/null 2>&1; then
  echo "== start omook Next :3002 =="
  bash "$OMOOK/scripts/start_omook_watchdog.sh" || true
fi

echo "== restart SSH tunnel watchdog (include :18082→:3002) =="
pkill -f 'daemon_ssh_reverse_tunnel.py' 2>/dev/null || true
# ethtrade reverse tunnel ssh
pkill -f 'ssh -N .*ethtrade' 2>/dev/null || true
sleep 2

mkdir -p "$GO/logs/mariago_ssh_tunnel"
if ! pgrep -f 'daemon_ssh_reverse_tunnel.py' >/dev/null; then
  nohup "$GO/.venv/bin/python" "$GO/scripts/daemon_ssh_reverse_tunnel.py" \
    >>"$GO/logs/mariago_ssh_tunnel/tunnel.watchdog.nohup.log" 2>&1 &
  echo "tunnel watchdog pid=$!"
else
  echo "tunnel watchdog relaunched by launchd: $(pgrep -f daemon_ssh_reverse_tunnel.py | tr '\n' ' ')"
fi

# 새 코드가 로드됐는지 확인될 때까지 잠시 대기 후, omook 포워드 없으면 강제 재시작 플래그
sleep 8
if ! pgrep -af 'ssh -N' | grep -q '18082'; then
  echo "omook forward missing → RESTART_REQUESTED"
  echo "need omook 18082 $(date -Iseconds)" > "$GO/logs/mariago_ssh_tunnel/RESTART_REQUESTED"
  sleep 20
fi

echo "== tunnel HEARTBEAT =="
cat "$GO/logs/mariago_ssh_tunnel/HEARTBEAT.md" || true
echo ""
pgrep -af 'ssh -N' | head -3 || true

echo "== deploy omook nginx on IDC =="
scp -o BatchMode=yes -o ConnectTimeout=20 \
  "$OMOOK/deploy/omook.mariago.kr.conf" \
  "$OMOOK/scripts/idc_install_omook_nginx.sh" \
  ethtrade:~/
ssh -o BatchMode=yes -o ConnectTimeout=20 ethtrade \
  'chmod +x ~/idc_install_omook_nginx.sh && sudo ~/idc_install_omook_nginx.sh'

echo "== probe IDC local =="
ssh -o BatchMode=yes ethtrade 'python3 - <<"PY"
import socket
for p in (18080,18081,18082,19320):
  s=socket.socket(); s.settimeout(2)
  try:
    s.connect(("127.0.0.1", p)); print(p, "OPEN")
  except Exception as e:
    print(p, "DOWN", type(e).__name__)
  finally:
    s.close()
PY
curl -sS -o /dev/null -w "local18080=%{http_code}\n" --max-time 5 http://127.0.0.1:18080/ || true
curl -sS -o /dev/null -w "local18081=%{http_code}\n" --max-time 5 http://127.0.0.1:18081/ || true
curl -sS -o /dev/null -w "local18082=%{http_code}\n" --max-time 5 http://127.0.0.1:18082/ || true
ls /etc/nginx/sites-enabled/
'

echo "== DNS =="
dig +short omook.mariago.kr A || true
dig +short omook.mariago.kr A @******** || true

echo "== external HTTPS =="
for u in \
  https://omook.mariago.kr/ \
  https://omook.mariago.kr/play \
  https://stoku.mariago.kr/ \
  https://baduk.mariago.kr/play \
  https://go.mariago.kr/play
do
  code=$(curl -k -sS -o /dev/null -w "%{http_code}" --max-time 20 "$u" || echo ERR)
  echo "  $code  $u"
done

echo ""
echo "DNS 없으면: omook.mariago.kr A → ******** 등록 후"
echo "  ssh ethtrade 'sudo certbot --nginx -d omook.mariago.kr'"