"""guardia-manager /var/www/manager 수정 + guardia-itsm 재검증""" import paramiko, sys, time, subprocess, os sys.stdout.reconfigure(encoding='utf-8', errors='replace') c = paramiko.SSHClient(); c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) c.connect('101.79.17.164', username='root', password='1q2w3e!Q', timeout=15) def run(label, cmd, timeout=120): print(f'\n[{label}]') _, o, _ = c.exec_command(cmd, timeout=timeout) out = o.read().decode('utf-8','replace').strip() if out: print(out[:500]) return out # 1. 빌드 산출물 경로 확인 run('빌드 산출물 위치 확인', 'find /tmp -name "index.html" -path "*/dist/*" 2>/dev/null | head -5 || echo "없음"') # 이미 삭제됐으면 재빌드 run('Manager 재빌드', 'rm -rf /tmp/mgr2 && ' 'git clone /tmp/mgr.bundle /tmp/mgr2 2>/dev/null || ' 'git clone http://zio:Zio%40Admin2026%21@127.0.0.1:9003/zio/guardia-manager.git /tmp/mgr2 2>/dev/null && ' 'echo "clone OK"', timeout=60) run('vite 빌드 (outDir 확인)', 'cat /tmp/mgr2/frontend/vite.config.ts 2>/dev/null || cat /tmp/mgr2/frontend/vite.config.js 2>/dev/null | grep -A3 "build\|outDir"') run('npm 빌드', 'cd /tmp/mgr2/frontend && ' 'npm ci --legacy-peer-deps 2>/dev/null || npm install --legacy-peer-deps && ' 'npm run build 2>&1 | tail -5', timeout=300) run('dist 위치 탐색', 'find /tmp/mgr2 -name "index.html" -not -path "*/node_modules/*" 2>/dev/null') # 실제 dist 폴더를 /var/www/manager에 복사 run('www/manager 복사', '''DIST=$(find /tmp/mgr2 -name "index.html" -not -path "*/node_modules/*" 2>/dev/null | head -1 | xargs dirname 2>/dev/null) if [ -n "$DIST" ]; then echo "dist 폴더: $DIST" mkdir -p /var/www/manager cp -r $DIST/. /var/www/manager/ echo "복사 완료: $(ls /var/www/manager/ | wc -l) 파일" stat /var/www/manager/index.html | grep Modify else echo "dist 폴더 없음" fi''') run('Manager 서비스 재기동', 'systemctl restart guardia-manager && sleep 3 && systemctl is-active guardia-manager') run('정리', 'rm -rf /tmp/mgr2 /tmp/mgr.bundle 2>/dev/null; echo "정리 완료"') # 2. guardia-itsm diff 재확인 run('ITSM app vs src 최종 확인', 'diff -rq /opt/guardia/src /opt/guardia/app ' '--exclude="*.pyc" --exclude="__pycache__" --exclude=".git" ' '--exclude="*.db" --exclude="uploads" --exclude=".env" ' '--exclude=".pytest_cache" --exclude="rpa_rules.json" --exclude="rpa" ' '--exclude="scripts" 2>/dev/null || echo "차이 없음"') c.close()