126 lines
3.3 KiB
Bash
Executable File
126 lines
3.3 KiB
Bash
Executable File
#!/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
|
||
|