zioinfo-web/deploy/gitea_messenger.py
DESKTOP-TKLFCPRython 1e98f0d04a refactor: 101.79.17.164 → zioinfo.co.kr 전체 도메인 변환 + Manager UI 배포
- 37개 파일 IP → zioinfo.co.kr 치환 (소스/매뉴얼/설정/하네스)
- Manager DrConsole/NetworkConsole/CsapConsole 빌드 + /var/www/manager/ 배포
- 테스트: Manager HTTP 200, ITSM 신규 API 7개 전체 200

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-31 10:09:17 +09:00

131 lines
4.9 KiB
Python

#!/usr/bin/env python3
"""GUARDiA Messenger Gitea 저장소 생성 + Push"""
import paramiko, time, sys, os, io, zipfile
HOST = '101.79.17.164'
USER = 'root'
PASS = '1q2w3e!Q'
LOCAL_APP = 'C:/GUARDiA/app'
SEP = chr(92)
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(HOST, username=USER, password=PASS, timeout=15)
sftp = client.open_sftp()
def run(label, cmd, timeout=60):
print(f'\n[{label}]')
chan = client.get_transport().open_session()
chan.set_combine_stderr(True)
chan.exec_command(cmd)
start = time.time()
while not chan.exit_status_ready():
if chan.recv_ready(): sys.stdout.buffer.write(chan.recv(4096)); sys.stdout.flush()
if time.time()-start > timeout: print('[TIMEOUT]'); break
time.sleep(0.3)
while chan.recv_ready(): sys.stdout.buffer.write(chan.recv(4096))
sys.stdout.flush()
chan.recv_exit_status()
# --- 1. 저장소 생성 ---
create_py = """
import urllib.request, json, base64, urllib.error
G = 'http://localhost:3000'
h = {'Content-Type':'application/json','Authorization':'Basic '+base64.b64encode(b'zio:Zio@Admin2026!').decode()}
d = json.dumps({'name':'guardia-messenger','description':'GUARDiA Messenger Mobile App','private':False,'auto_init':False}).encode()
req = urllib.request.Request(G+'/api/v1/user/repos',data=d,method='POST',headers=h)
try:
r=urllib.request.urlopen(req)
print('OK:',json.loads(r.read()).get('full_name'))
except urllib.error.HTTPError as e:
b=e.read(); print('HTTP',e.code,b.decode()[:100])
"""
with sftp.open('/tmp/cr.py','w') as f: f.write(create_py)
run('저장소 생성', 'python3 /tmp/cr.py')
# --- 2. 소스 패키징 ---
print('\n[소스 패키징]')
SKIP = {'node_modules','.git','android','ios','__pycache__','.expo'}
buf = io.BytesIO(); n = 0
with zipfile.ZipFile(buf,'w',zipfile.ZIP_DEFLATED) as zf:
for root,dirs,files in os.walk(LOCAL_APP):
dirs[:] = [d for d in dirs if d not in SKIP]
rel = os.path.relpath(root,LOCAL_APP).replace(SEP,'/')
for f in files:
if f.endswith(('.pyc','.log')): continue
arc = f if rel=='.' else f'{rel}/{f}'
zf.write(os.path.join(root,f),arc); n+=1
buf.seek(0)
with sftp.open('/tmp/msg.zip','wb') as f: f.write(buf.read())
print(f' {n}개 파일')
# --- 3. git push (서버 스크립트) ---
push_py = """
import subprocess, os
os.makedirs('/tmp/msg-push', exist_ok=True)
subprocess.run(['rm','-rf','/tmp/msg-push'], check=False)
os.makedirs('/tmp/msg-push')
subprocess.run(['unzip','-q','/tmp/msg.zip','-d','/tmp/msg-push'], check=True)
env = {'HOME':'/root','PATH':'/usr/bin:/bin'}
cwd = '/tmp/msg-push'
for cmd in [
['git','init','-q'],
['git','config','user.email','ci@zioinfo.co.kr'],
['git','config','user.name','ZioCI'],
['git','add','-A'],
['git','commit','-q','-m','feat: GUARDiA Messenger v1.0.0 initial commit'],
['git','remote','add','origin','http://zio:Zio%40Admin2026%21@localhost:3000/zio/guardia-messenger.git'],
['git','push','origin','main'],
]:
r = subprocess.run(cmd, cwd=cwd, capture_output=True, text=True)
if r.returncode != 0 and cmd[1] not in ['config','remote']:
print('ERR',cmd[1],r.stderr[:100])
else:
print('OK',cmd[1])
"""
with sftp.open('/tmp/push.py','w') as f: f.write(push_py)
run('Git Push', 'python3 /tmp/push.py', 60)
# --- 4. Webhook ---
wh_py = """
import urllib.request, json, base64
G='http://localhost:3000'
h={'Content-Type':'application/json','Authorization':'Basic '+base64.b64encode(b'zio:Zio@Admin2026!').decode()}
d=json.dumps({'type':'gitea','active':True,'config':{'url':'http://localhost:9999/','content_type':'json','secret':'zioinfo-deploy-2026'},'events':['push']}).encode()
req=urllib.request.Request(G+'/api/v1/repos/zio/guardia-messenger/hooks',data=d,method='POST',headers=h)
try:
r=urllib.request.urlopen(req); print('Webhook OK, ID:',json.loads(r.read()).get('id'))
except Exception as e: print('Webhook 오류:',e)
"""
with sftp.open('/tmp/wh.py','w') as f: f.write(wh_py)
run('Webhook 등록', 'python3 /tmp/wh.py')
# --- 5. 최종 확인 ---
check_py = """
import urllib.request, json, base64
G='http://localhost:3000'
h={'Authorization':'Basic '+base64.b64encode(b'zio:Zio@Admin2026!').decode()}
r=urllib.request.Request(G+'/api/v1/repos/zio/guardia-messenger',headers=h)
try:
d=json.loads(urllib.request.urlopen(r).read())
print('저장소:', d.get('full_name'))
print('URL: ', d.get('html_url'))
print('브랜치:', d.get('default_branch'))
except Exception as e: print('오류:',e)
# 브랜치 목록
r2=urllib.request.Request(G+'/api/v1/repos/zio/guardia-messenger/branches',headers=h)
try:
branches=json.loads(urllib.request.urlopen(r2).read())
print('브랜치 목록:', [b['name'] for b in branches])
except: pass
"""
with sftp.open('/tmp/check.py','w') as f: f.write(check_py)
sftp.close()
run('최종 확인', 'python3 /tmp/check.py')
client.close()