| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- #!/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"
|