#!/bin/bash # 边缘节点部署:vmagent + 内存/磁盘缓存 # 用法: ./deploy.sh [--local] --local = 本机同机(中央与边缘同机) set -e cd "$(dirname "${BASH_SOURCE[0]}")" # --local: 中央与边缘同机,使用 host.docker.internal if [ "$1" = "--local" ]; then [ ! -f .env ] && [ -f env.example ] && cp env.example .env sed -i 's/^CENTRAL_SERVER_HOST=.*/CENTRAL_SERVER_HOST=host.docker.internal/' .env 2>/dev/null || \ echo 'CENTRAL_SERVER_HOST=host.docker.internal' >> .env grep -q '^CENTRAL_SERVER_PORT=' .env || echo 'CENTRAL_SERVER_PORT=8428' >> .env fi # Docker 环境 DOCKER_CMD="docker compose" docker compose version &>/dev/null || DOCKER_CMD="docker-compose" command -v docker &>/dev/null || { echo "❌ 需要 Docker"; exit 1; } $DOCKER_CMD version &>/dev/null || { echo "❌ 需要 Docker Compose"; exit 1; } command -v jq &>/dev/null || { echo "❌ 需要 jq"; exit 1; } # 配置文件 [ -f config/targets.csv ] && (cd config && ./update-configs.sh) || true [ ! -f config/target-onvif.json ] && echo '[]' > config/target-onvif.json [ ! -f config/target-ping.json ] && echo '[]' > config/target-ping.json [ ! -f prometheus-edge/vmagent-scrape.yml.template ] && { echo "❌ 缺少 vmagent-scrape.yml.template"; exit 1; } # .env [ ! -f .env ] && cp env.example .env # targets.csv(无则建最小示例) [ ! -f config/targets.csv ] && \ printf '%s\n' "type,ip,name,role,parent,uplink_type,network,device_type,model,location,username,password,onvif_port,lat,lon" \ "ping,8.8.8.8,google_dns,dns,,,external,,,,,,,,," \ "ping,1.1.1.1,cloudflare_dns,dns,,,external,,,,,,,,," > config/targets.csv # 启动 $DOCKER_CMD down 2>/dev/null || true $DOCKER_CMD up -d sleep 5 $DOCKER_CMD ps echo "" echo "✅ 边缘已启动 http://localhost:9092 (Grafana 数据源选 VictoriaMetrics)"