#!/usr/bin/env bash # deploy.sh - 一键部署 HookVision 到目标设备 # 用法: bash deploy/deploy.sh [IP] [用户名] [密码] # 示例: bash deploy/deploy.sh 192.168.1.211 root 123456 set -euo pipefail TARGET_IP="${1:-192.168.1.211}" TARGET_USER="${2:-root}" TARGET_PASS="${3:-123456}" REMOTE_DIR="/tmp/hookvision_rk3578" SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" PROJECT_ROOT="$(dirname "$SCRIPT_DIR")" DEPLOY_DIR="${SCRIPT_DIR}/hookvision_rk3578" echo "=== HookVision 一键部署 ===" echo "目标: ${TARGET_USER}@${TARGET_IP}" echo "" # 构建部署包(每次都重新构建) echo "构建部署包..." bash "${SCRIPT_DIR}/pack.sh" "${SCRIPT_DIR}" # 安装 sshpass(如果没有) if ! command -v sshpass &>/dev/null; then echo "安装 sshpass..." apt-get install -y -qq sshpass 2>/dev/null || \ yum install -y -q sshpass 2>/dev/null || { echo "错误: 无法安装 sshpass,请手动安装" exit 1 } fi # 定义远程执行函数 remote_exec() { local cmd="$1" sshpass -p "${TARGET_PASS}" ssh -o StrictHostKeyChecking=no \ "${TARGET_USER}@${TARGET_IP}" "${cmd}" } # 检查设备连通性 echo "[1/5] 检查设备连通性..." if ! ping -c 1 -W 2 "${TARGET_IP}" &>/dev/null; then echo "错误: 无法连接到 ${TARGET_IP}" exit 1 fi echo "设备可达" # 停止已有服务 echo "[2/5] 停止已有服务..." sshpass -p "${TARGET_PASS}" ssh -o StrictHostKeyChecking=no -o ConnectTimeout=5 \ "${TARGET_USER}@${TARGET_IP}" "pkill -9 -f HookVision 2>/dev/null; exit 0" || true echo "已停止" # 传输部署包 echo "[3/5] 传输部署包到 ${REMOTE_DIR}..." sshpass -p "${TARGET_PASS}" ssh -o StrictHostKeyChecking=no -o ConnectTimeout=5 \ "${TARGET_USER}@${TARGET_IP}" "rm -rf ${REMOTE_DIR}" 2>/dev/null || true sshpass -p "${TARGET_PASS}" scp -o StrictHostKeyChecking=no -r \ "${DEPLOY_DIR}" "${TARGET_USER}@${TARGET_IP}:/tmp/" echo "传输完成" # 执行安装 echo "[4/5] 执行安装..." sshpass -p "${TARGET_PASS}" ssh -o StrictHostKeyChecking=no -o ConnectTimeout=5 \ "${TARGET_USER}@${TARGET_IP}" "cd ${REMOTE_DIR} && bash install.sh" echo "安装完成" # 启动服务 echo "[5/5] 启动 HookVision 服务..." sshpass -p "${TARGET_PASS}" ssh -o StrictHostKeyChecking=no -o ConnectTimeout=5 \ "${TARGET_USER}@${TARGET_IP}" "systemctl start hookvision" 2>/dev/null || true sleep 2 echo "" echo "=== 部署完成 ===" echo "HookVision 已部署为 systemd 服务" echo "查看状态: systemctl status hookvision" echo "重启服务: systemctl restart hookvision" echo "停止服务: systemctl stop hookvision"