#!/usr/bin/env python3 """ AI回复来源标识功能 - 前端部署脚本 同时部署 H5 和 Agent 前端 """ import os import sys import time import subprocess import base64 # 读取 jms_ops 模块 sys.path.insert(0, r"C:\Users\simon\.workbuddy\skills\jumpserver-ops\scripts") from jms_ops import PlinkSession, get_connection_tokens def deploy_frontend(local_dir, remote_dir, name): """部署单个前端""" print(f"\n📦 开始上传 {name} ...") # 压缩本地 dist 目录 print(f" 压缩 {name} dist 目录...") tar_file = f"/tmp/{name.lower()}-dist.tar.gz" # 切换到 dist 的父目录,然后压缩 dist 目录 subprocess.run(f'cd "{local_dir}" && tar -czf {tar_file} .', shell=True, check=True) # 读取 tar 文件并进行 base64 编码 print(f" Base64 编码...") with open(tar_file, 'rb') as f: content = f.read() b64_content = base64.b64encode(content).decode('ascii') # 获取连接令牌 tokens = get_connection_tokens(1) if not tokens: print("❌ 获取 token 失败") return False token_id, token_secret = tokens[0] # 创建会话并上传 session = PlinkSession(f"JMS-{token_id}", token_secret) if not session.connect(): print("❌ 会话启动失败") return False # 先清空目标目录 print(f" 清空目标目录...") session.run_command(f"rm -rf {remote_dir}/dist", timeout=30) # 上传 base64 内容 print(f" 上传文件...") chunk_size = 3800 for i in range(0, len(b64_content), chunk_size): chunk = b64_content[i:i+chunk_size] decode_cmd = f'echo "{chunk}" | base64 -d >> /tmp/{name.lower()}-dist-upload.tar.gz' session.run_command(decode_cmd, timeout=30) # 解压 print(f" 解压文件...") session.run_command(f"cd /tmp && tar -xzf {name.lower()}-dist-upload.tar.gz -C {remote_dir}", timeout=60) # 清理临时文件 session.run_command(f"rm -f /tmp/{name.lower()}-dist.tar.gz /tmp/{name.lower()}-dist-upload.tar.gz", timeout=30) session.close() print(f"✅ {name} 部署完成!") return True def main(): print("=" * 50) print("🚀 AI回复来源标识 - 前端部署") print("=" * 50) # H5 部署 h5_local = r"D:\资料\03-项目开发\wecom_it_smart_desk\frontend-h5\dist" h5_remote = "/opt/wecom-it-desk/frontend-h5" deploy_frontend(h5_local, h5_remote, "H5") # Agent 部署 agent_local = r"D:\资料\03-项目开发\wecom_it_smart_desk\frontend-agent\dist" agent_remote = "/opt/wecom-it-desk/frontend-agent" deploy_frontend(agent_local, agent_remote, "Agent") # 重启 nginx print("\n" + "=" * 50) print("🔄 重启 nginx...") tokens = get_connection_tokens(1) if not tokens: print("❌ 获取 token 失败") return token_id, token_secret = tokens[0] session = PlinkSession(f"JMS-{token_id}", token_secret) if not session.connect(): print("❌ 会话启动失败") return session.run_command("cd /opt/wecom-it-desk && docker compose restart nginx", timeout=60) session.close() print("\n✅ 所有部署完成!") print(" - H5: https://itportal.servyou.com.cn/h5/") print(" - Agent: https://itportal.servyou.com.cn/itagent/") if __name__ == "__main__": main()