@echo off chcp 65001 >nul setlocal enabledelayedexpansion :: ============================================================ :: Windows CMD 一键部署脚本(使用系统自带 OpenSSH) :: 用法: 直接双击 或 CMD 中运行 deploy.bat :: 前提: Win10 1809+ 自带 scp.exe / ssh.exe :: 或安装了 Git for Windows(含 ssh) :: ============================================================ set HOST=39.97.59.228 set USER=root set PORT=22 set REMOTE_DIR=/data/vent_agent/vent_deep_agent_1.3 set APP_PORT=8070 :: 本地项目目录(脚本所在目录) set LOCAL_DIR=%~dp0 set LOCAL_DIR=%LOCAL_DIR:~0,-1% echo ======================================== echo 配风计划审查系统 - 一键部署 echo ======================================== echo 服务器: %USER%@%HOST%:%PORT% echo 远程目录: %REMOTE_DIR% echo 本地目录: %LOCAL_DIR% echo ======================================== echo. echo [提示] 部署过程中会提示输入密码: Ccri123456 echo. :: ── 检测 SSH 客户端 ── where ssh >nul 2>&1 if %errorlevel% neq 0 ( echo [错误] 未找到 ssh.exe,请安装 Git for Windows 或 OpenSSH pause exit /b 1 ) where scp >nul 2>&1 if %errorlevel% neq 0 ( echo [错误] 未找到 scp.exe pause exit /b 1 ) :: SSH 通用参数 set SSH_OPTS=-o StrictHostKeyChecking=no -p %PORT% :: ============================================================ :: 步骤 1: 创建远程目录 :: ============================================================ echo [步骤 1/4] 创建远程目录... ssh %SSH_OPTS% %USER%@%HOST% "mkdir -p %REMOTE_DIR%" if %errorlevel% neq 0 ( echo [错误] SSH 连接失败,请检查网络和密码 pause exit /b 1 ) echo √ 远程目录已就绪 echo. :: ============================================================ :: 步骤 2: 上传项目文件 :: ============================================================ echo [步骤 2/4] 上传项目文件(全量覆盖)... :: 先上传核心文件 scp %SSH_OPTS% -r ^ "%LOCAL_DIR%\main.py" ^ "%LOCAL_DIR%\requirements.txt" ^ "%LOCAL_DIR%\restart.sh" ^ "%LOCAL_DIR%\agents" ^ "%LOCAL_DIR%\api" ^ "%LOCAL_DIR%\tools" ^ "%LOCAL_DIR%\skills" ^ "%LOCAL_DIR%\db" ^ %USER%@%HOST%:%REMOTE_DIR%/ if %errorlevel% neq 0 ( echo [警告] 部分文件上传失败,继续... ) echo √ 核心文件上传完成 echo. :: 上传 .env(如果存在且不是生产配置) if exist "%LOCAL_DIR%\.env" ( echo [步骤 2.5/4] 上传 .env 配置... scp %SSH_OPTS% "%LOCAL_DIR%\.env" %USER%@%HOST%:%REMOTE_DIR%/ echo √ .env 已上传 echo. ) :: ============================================================ :: 步骤 3: 远程杀进程 :: ============================================================ echo [步骤 3/4] 停止旧服务(端口 %APP_PORT%)... ssh %SSH_OPTS% %USER%@%HOST% "PID=\$(lsof -ti:%APP_PORT% 2>/dev/null); if [ -n \"\$PID\" ]; then echo \" 终止进程 PID: \$PID\"; kill -9 \$PID; sleep 1; echo ' √ 旧进程已终止'; else echo ' → 端口无进程占用'; fi; sleep 1; fuser -k %APP_PORT%/tcp 2>/dev/null; true" echo. :: ============================================================ :: 步骤 4: 启动服务 :: ============================================================ echo [步骤 4/4] 启动服务... ssh %SSH_OPTS% %USER%@%HOST% "cd %REMOTE_DIR% && chmod +x restart.sh && ./restart.sh" echo. :: 等待并验证 echo 等待服务启动... timeout /t 4 /nobreak >nul ssh %SSH_OPTS% %USER%@%HOST% "lsof -ti:%APP_PORT% &>/dev/null && echo '========================================' && echo ' √ 部署成功!' && echo ' 服务地址: http://%HOST%:%APP_PORT%' && echo ' API 文档: http://%HOST%:%APP_PORT%/docs' && echo '========================================' || echo '========================================' && echo ' ⚠ 服务可能未启动,请 SSH 检查' && echo ' ssh root@%HOST%' && echo ' tail -f %REMOTE_DIR%/vent_deep_agent.log' && echo '========================================'" echo. echo 完成。 pause