diff --git a/ecosystem.config.cjs b/ecosystem.config.cjs index 2b5d190..c9629e4 100644 --- a/ecosystem.config.cjs +++ b/ecosystem.config.cjs @@ -1,5 +1,14 @@ module.exports = { apps: [ + { + name: "sundol-chrome", + script: "./start-chrome.sh", + interpreter: "/bin/bash", + cwd: "/home/opc/sundol", + env: { + DISPLAY: ":1", + }, + }, { name: "sundol-backend", script: "./start-backend.sh", @@ -12,7 +21,7 @@ module.exports = { }, { name: "sundol-frontend", - script: "node", + script: "/usr/local/bin/node", args: "sundol-frontend/.next/standalone/server.js", cwd: "/home/opc/sundol", env: { diff --git a/start-chrome.sh b/start-chrome.sh new file mode 100755 index 0000000..b4a36d3 --- /dev/null +++ b/start-chrome.sh @@ -0,0 +1,35 @@ +#!/bin/bash +# 사용자 Chrome을 CDP 디버깅 포트(9222)로 기동한다. +# PM2(sundol-chrome)가 관리하는 전용 스크립트이므로 수동 실행 금지. +# 봇 판정 우회를 위해 사용자 로그인 세션이 담긴 기존 프로필을 그대로 사용한다. +set -u + +export DISPLAY=:1 +PROFILE_DIR="/home/opc/.config/google-chrome-cdp" +DEBUG_PORT=9222 + +# 1) 동일 프로필을 쓰는 기존 Chrome 종료. +# 같은 user-data-dir로 Chrome이 이미 떠 있으면 새 인스턴스는 +# 디버깅 포트를 열지 못하고 기존 인스턴스에 명령만 전달하고 끝난다. +pkill -TERM -f "/opt/google/chrome/chrome" 2>/dev/null || true +for _ in $(seq 1 10); do + pgrep -f "/opt/google/chrome/chrome" >/dev/null 2>&1 || break + sleep 1 +done +pkill -KILL -f "/opt/google/chrome/chrome" 2>/dev/null || true +sleep 1 + +# 2) 비정상 종료로 남은 stale 싱글톤 락 정리. +rm -f "$PROFILE_DIR/SingletonLock" \ + "$PROFILE_DIR/SingletonCookie" \ + "$PROFILE_DIR/SingletonSocket" 2>/dev/null || true + +# 3) Chrome 기동. exec로 foreground 유지 → PM2 fork 모드가 프로세스를 추적. +# --remote-debugging-address=127.0.0.1 로 IPv4 바인딩을 명시한다. +exec /usr/bin/google-chrome \ + --user-data-dir="$PROFILE_DIR" \ + --remote-debugging-port="$DEBUG_PORT" \ + --remote-debugging-address=127.0.0.1 \ + --no-first-run \ + --no-default-browser-check \ + --start-maximized diff --git a/sundol-backend/src/main/java/com/sundol/service/PlaywrightBrowserService.java b/sundol-backend/src/main/java/com/sundol/service/PlaywrightBrowserService.java index 9b3b75f..30e5531 100644 --- a/sundol-backend/src/main/java/com/sundol/service/PlaywrightBrowserService.java +++ b/sundol-backend/src/main/java/com/sundol/service/PlaywrightBrowserService.java @@ -20,7 +20,7 @@ import java.util.List; public class PlaywrightBrowserService { private static final Logger log = LoggerFactory.getLogger(PlaywrightBrowserService.class); - private static final String CDP_URL = "http://localhost:9222"; + private static final String CDP_URL = "http://127.0.0.1:9222"; private Playwright playwright; private Browser browser;