#!/bin/bash # 一键启动脚本 # 用于初始化目录并启动所有服务 # 镜像构建已移至 build/build_images.sh set -e SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" TEST_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)" cd "$TEST_DIR" echo "==========================================" echo " Argus Metrics 一键启动脚本" echo "==========================================" echo "" echo "当前工作目录: $TEST_DIR" echo "" # 检查 Docker 和 Docker Compose if ! command -v docker &> /dev/null; then echo "错误: 未找到 docker 命令,请先安装 Docker" exit 1 fi # 检查 docker compose 命令 if ! docker compose version &> /dev/null 2>&1; then echo "错误: 未找到 docker compose 命令,请确保 Docker Compose V2 已安装" exit 1 fi echo "使用: docker compose" echo "Compose 文件: $TEST_DIR/docker-compose.yml" echo "" # 检查并创建 .env 文件 if [ ! -f .env ]; then echo "未找到 .env 文件,从 env.example 创建..." cp env.example .env echo "已创建 .env 文件,请根据需要修改配置" fi # 加载环境变量 source .env # 检查并创建 Docker 网络 echo "检查 Docker 网络..." NETWORK_NAME="argus-debug-net" if docker network inspect "$NETWORK_NAME" >/dev/null 2>&1; then echo "网络 $NETWORK_NAME 已存在" else echo "创建网络 $NETWORK_NAME..." docker network create --driver bridge --subnet 172.30.0.0/16 "$NETWORK_NAME" echo "网络创建成功" fi echo "" echo "1. 初始化目录结构..." bash "$SCRIPT_DIR/init-directories.sh" echo "" echo "2. 检测GPU环境..." # 检测GPU环境 if bash "$SCRIPT_DIR/check-gpu.sh"; then echo "GPU环境可用,将启动GPU节点" GPU_AVAILABLE=true else echo "GPU环境不可用,跳过GPU节点" GPU_AVAILABLE=false fi echo "" echo "3. 检查 Docker 镜像..." # 检查必要的镜像是否存在 BASE_IMAGES=("argus-metric-ftp:latest" "argus-metric-prometheus:latest" "argus-metric-grafana:latest" "argus-metric-test-node:latest") GPU_IMAGES=("argus-metric-test-gpu-node:latest") # 先检查基础镜像 missing_images=() for image in "${BASE_IMAGES[@]}"; do if ! docker images --format "{{.Repository}}:{{.Tag}}" | grep -q "^${image}$"; then missing_images+=("$image") fi done # 检查GPU镜像(如果GPU环境可用) if [ "$GPU_AVAILABLE" = true ]; then for image in "${GPU_IMAGES[@]}"; do if ! docker images --format "{{.Repository}}:{{.Tag}}" | grep -q "^${image}$"; then missing_images+=("$image") fi done fi if [ ${#missing_images[@]} -gt 0 ]; then echo "以下镜像缺失,请先运行 build/build_images.sh 构建镜像:" for image in "${missing_images[@]}"; do echo " • $image" done echo "" echo "构建命令:" echo " ./build/build_images.sh --metric" exit 1 else echo "所有必要镜像已存在" fi echo "" echo "4. 启动基础服务..." cd "$TEST_DIR" # 根据GPU环境决定启动的服务 if [ "$GPU_AVAILABLE" = true ]; then echo "启动所有服务(包括GPU节点)..." docker compose up -d ftp prometheus grafana test-node test-gpu-node else echo "启动基础服务(跳过GPU节点)..." docker compose up -d ftp prometheus grafana test-node fi echo "" echo "4. 等待服务启动..." sleep 5