Files
argus/src/metric/tests/scripts/common/start-all.sh

126 lines
3.3 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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