deploy.bat 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. @echo off
  2. chcp 65001 >nul
  3. setlocal enabledelayedexpansion
  4. :: ============================================================
  5. :: Windows CMD 一键部署脚本(使用系统自带 OpenSSH)
  6. :: 用法: 直接双击 或 CMD 中运行 deploy.bat
  7. :: 前提: Win10 1809+ 自带 scp.exe / ssh.exe
  8. :: 或安装了 Git for Windows(含 ssh)
  9. :: ============================================================
  10. set HOST=39.97.59.228
  11. set USER=root
  12. set PORT=22
  13. set REMOTE_DIR=/data/vent_agent/vent_deep_agent_1.3
  14. set APP_PORT=8070
  15. :: 本地项目目录(脚本所在目录)
  16. set LOCAL_DIR=%~dp0
  17. set LOCAL_DIR=%LOCAL_DIR:~0,-1%
  18. echo ========================================
  19. echo 配风计划审查系统 - 一键部署
  20. echo ========================================
  21. echo 服务器: %USER%@%HOST%:%PORT%
  22. echo 远程目录: %REMOTE_DIR%
  23. echo 本地目录: %LOCAL_DIR%
  24. echo ========================================
  25. echo.
  26. echo [提示] 部署过程中会提示输入密码: Ccri123456
  27. echo.
  28. :: ── 检测 SSH 客户端 ──
  29. where ssh >nul 2>&1
  30. if %errorlevel% neq 0 (
  31. echo [错误] 未找到 ssh.exe,请安装 Git for Windows 或 OpenSSH
  32. pause
  33. exit /b 1
  34. )
  35. where scp >nul 2>&1
  36. if %errorlevel% neq 0 (
  37. echo [错误] 未找到 scp.exe
  38. pause
  39. exit /b 1
  40. )
  41. :: SSH 通用参数
  42. set SSH_OPTS=-o StrictHostKeyChecking=no -p %PORT%
  43. :: ============================================================
  44. :: 步骤 1: 创建远程目录
  45. :: ============================================================
  46. echo [步骤 1/4] 创建远程目录...
  47. ssh %SSH_OPTS% %USER%@%HOST% "mkdir -p %REMOTE_DIR%"
  48. if %errorlevel% neq 0 (
  49. echo [错误] SSH 连接失败,请检查网络和密码
  50. pause
  51. exit /b 1
  52. )
  53. echo √ 远程目录已就绪
  54. echo.
  55. :: ============================================================
  56. :: 步骤 2: 上传项目文件
  57. :: ============================================================
  58. echo [步骤 2/4] 上传项目文件(全量覆盖)...
  59. :: 先上传核心文件
  60. scp %SSH_OPTS% -r ^
  61. "%LOCAL_DIR%\main.py" ^
  62. "%LOCAL_DIR%\requirements.txt" ^
  63. "%LOCAL_DIR%\restart.sh" ^
  64. "%LOCAL_DIR%\agents" ^
  65. "%LOCAL_DIR%\api" ^
  66. "%LOCAL_DIR%\tools" ^
  67. "%LOCAL_DIR%\skills" ^
  68. "%LOCAL_DIR%\db" ^
  69. %USER%@%HOST%:%REMOTE_DIR%/
  70. if %errorlevel% neq 0 (
  71. echo [警告] 部分文件上传失败,继续...
  72. )
  73. echo √ 核心文件上传完成
  74. echo.
  75. :: 上传 .env(如果存在且不是生产配置)
  76. if exist "%LOCAL_DIR%\.env" (
  77. echo [步骤 2.5/4] 上传 .env 配置...
  78. scp %SSH_OPTS% "%LOCAL_DIR%\.env" %USER%@%HOST%:%REMOTE_DIR%/
  79. echo √ .env 已上传
  80. echo.
  81. )
  82. :: ============================================================
  83. :: 步骤 3: 远程杀进程
  84. :: ============================================================
  85. echo [步骤 3/4] 停止旧服务(端口 %APP_PORT%)...
  86. 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"
  87. echo.
  88. :: ============================================================
  89. :: 步骤 4: 启动服务
  90. :: ============================================================
  91. echo [步骤 4/4] 启动服务...
  92. ssh %SSH_OPTS% %USER%@%HOST% "cd %REMOTE_DIR% && chmod +x restart.sh && ./restart.sh"
  93. echo.
  94. :: 等待并验证
  95. echo 等待服务启动...
  96. timeout /t 4 /nobreak >nul
  97. 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 '========================================'"
  98. echo.
  99. echo 完成。
  100. pause