deploy.sh 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. #!/usr/bin/env bash
  2. # deploy.sh - 一键部署 HookVision 到目标设备
  3. # 用法: bash deploy/deploy.sh [IP] [用户名] [密码]
  4. # 示例: bash deploy/deploy.sh 192.168.1.211 root 123456
  5. set -euo pipefail
  6. TARGET_IP="${1:-192.168.1.211}"
  7. TARGET_USER="${2:-root}"
  8. TARGET_PASS="${3:-123456}"
  9. REMOTE_DIR="/tmp/hookvision_rk3578"
  10. SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
  11. PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
  12. DEPLOY_DIR="${SCRIPT_DIR}/hookvision_rk3578"
  13. echo "=== HookVision 一键部署 ==="
  14. echo "目标: ${TARGET_USER}@${TARGET_IP}"
  15. echo ""
  16. # 构建部署包(每次都重新构建)
  17. echo "构建部署包..."
  18. bash "${SCRIPT_DIR}/pack.sh" "${SCRIPT_DIR}"
  19. # 安装 sshpass(如果没有)
  20. if ! command -v sshpass &>/dev/null; then
  21. echo "安装 sshpass..."
  22. apt-get install -y -qq sshpass 2>/dev/null || \
  23. yum install -y -q sshpass 2>/dev/null || {
  24. echo "错误: 无法安装 sshpass,请手动安装"
  25. exit 1
  26. }
  27. fi
  28. # 定义远程执行函数
  29. remote_exec() {
  30. local cmd="$1"
  31. sshpass -p "${TARGET_PASS}" ssh -o StrictHostKeyChecking=no \
  32. "${TARGET_USER}@${TARGET_IP}" "${cmd}"
  33. }
  34. # 检查设备连通性
  35. echo "[1/5] 检查设备连通性..."
  36. if ! ping -c 1 -W 2 "${TARGET_IP}" &>/dev/null; then
  37. echo "错误: 无法连接到 ${TARGET_IP}"
  38. exit 1
  39. fi
  40. echo "设备可达"
  41. # 停止已有服务
  42. echo "[2/5] 停止已有服务..."
  43. sshpass -p "${TARGET_PASS}" ssh -o StrictHostKeyChecking=no -o ConnectTimeout=5 \
  44. "${TARGET_USER}@${TARGET_IP}" "pkill -9 -f HookVision 2>/dev/null; exit 0" || true
  45. echo "已停止"
  46. # 传输部署包
  47. echo "[3/5] 传输部署包到 ${REMOTE_DIR}..."
  48. sshpass -p "${TARGET_PASS}" ssh -o StrictHostKeyChecking=no -o ConnectTimeout=5 \
  49. "${TARGET_USER}@${TARGET_IP}" "rm -rf ${REMOTE_DIR}" 2>/dev/null || true
  50. sshpass -p "${TARGET_PASS}" scp -o StrictHostKeyChecking=no -r \
  51. "${DEPLOY_DIR}" "${TARGET_USER}@${TARGET_IP}:/tmp/"
  52. echo "传输完成"
  53. # 执行安装
  54. echo "[4/5] 执行安装..."
  55. sshpass -p "${TARGET_PASS}" ssh -o StrictHostKeyChecking=no -o ConnectTimeout=5 \
  56. "${TARGET_USER}@${TARGET_IP}" "cd ${REMOTE_DIR} && bash install.sh"
  57. echo "安装完成"
  58. # 启动服务
  59. echo "[5/5] 启动 HookVision 服务..."
  60. sshpass -p "${TARGET_PASS}" ssh -o StrictHostKeyChecking=no -o ConnectTimeout=5 \
  61. "${TARGET_USER}@${TARGET_IP}" "systemctl start hookvision" 2>/dev/null || true
  62. sleep 2
  63. echo ""
  64. echo "=== 部署完成 ==="
  65. echo "HookVision 已部署为 systemd 服务"
  66. echo "查看状态: systemctl status hookvision"
  67. echo "重启服务: systemctl restart hookvision"
  68. echo "停止服务: systemctl stop hookvision"