#!/bin/bash # 物联网基站基础服务启动脚本 set -e echo "=== 启动物联网基站基础服务 ===" # 检查Docker是否运行 if ! docker info > /dev/null 2>&1; then echo "错误: Docker未运行,请先启动Docker" exit 1 fi # 检查Docker Compose是否安装 if ! command -v docker-compose &> /dev/null; then echo "错误: Docker Compose未安装,请先安装Docker Compose" exit 1 fi # 检查Redis是否已运行 REDIS_RUNNING=false if docker ps --format "table {{.Names}}" | grep -q "redis"; then echo "✓ 检测到Redis容器已运行" REDIS_RUNNING=true elif redis-cli ping > /dev/null 2>&1; then echo "✓ 检测到本地Redis服务已运行" REDIS_RUNNING=true else echo "! Redis服务未运行,将启动Docker中的Redis" fi # 启动服务 if [ "$REDIS_RUNNING" = true ]; then echo "启动除Redis外的服务..." docker-compose -f docker-compose-without-redis.yml up -d else echo "启动所有服务..." docker-compose up -d fi # 等待服务启动 echo "等待服务启动..." sleep 15 # 检查服务状态 echo "检查服务状态..." docker-compose ps # 初始化数据库 echo "初始化数据库..." if docker-compose exec -T postgres pg_isready -U postgres > /dev/null 2>&1; then docker-compose exec -T postgres psql -U postgres -c "CREATE DATABASE iot_base_station;" || echo "数据库可能已存在" # 运行数据库迁移 echo "运行数据库迁移..." go run cmd/migrate/main.go up else echo "警告: PostgreSQL未就绪,请手动运行迁移" fi # 显示服务信息 echo "" echo "=== 服务信息 ===" echo "PostgreSQL: localhost:5432" echo "InfluxDB: http://localhost:8086" echo "Redis: localhost:6379" echo "NATS: localhost:4222" echo "MQTT: localhost:1883" echo "Grafana: http://localhost:3000 (admin/admin)" echo "Prometheus: http://localhost:9090" # 显示下一步操作 echo "" echo "=== 下一步操作 ===" echo "1. 启动主服务器: go run cmd/server/main.go" echo "2. 启动数据网关: go run cmd/gateway/main.go" echo "3. 启动监控服务: go run cmd/monitor/main.go" echo "4. 运行设备模拟器: go run simulations/main.go" echo "" echo "或者使用热重载: air -c .air.toml" echo "" echo "测试API: curl -X GET http://localhost:8080/health" echo ""