zioinfo-mail/scripts/setup/fix_manager_www.py
2026-06-01 21:55:48 +09:00

61 lines
2.5 KiB
Python

"""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()