Files
starRiverProperty/scripts/test-env/setup.sh
T
反编译工作区 fa6f5fad37 fix: remove ZK port from conflict check (Kafka now uses KRaft)
Former-commit-id: 088ef1707668288a81ce245ce13015f5681bb81e
2026-05-01 22:49:47 +08:00

140 lines
4.5 KiB
Bash
Executable File

#!/bin/bash
# setup.sh — V2 测试环境一键搭建入口
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$SCRIPT_DIR/config/env.sh"
cat << 'BANNER'
╔══════════════════════════════════════════════╗
║ V2 Full-System Test Environment Setup ║
║ cw-elevator-application v2.0.7 ║
╚══════════════════════════════════════════════╝
BANNER
START_TIME=$(date +%s)
# ============================================
# Phase 1: 环境检查
# ============================================
log_info "Phase 1/6: Environment check"
# JDK 8
if [[ ! -x "$JAVA_HOME/bin/java" ]]; then
log_error "JDK 8 not found at $JAVA_HOME"
log_info "Set DEPLOY_JDK8 environment variable to correct path"
exit 1
fi
JAVA_VER=$("$JAVA_HOME/bin/java" -version 2>&1 | head -1)
log_ok "JDK: $JAVA_VER"
# Maven
if ! command -v mvn &>/dev/null; then
log_error "Maven not found"
exit 1
fi
log_ok "Maven: $(mvn --version 2>&1 | head -1)"
# Docker
if ! docker compose version &>/dev/null; then
log_error "Docker Compose not found"
exit 1
fi
log_ok "Docker: $(docker compose version)"
# MySQL
if ! mysql -h "$MYSQL_HOST" -P "$MYSQL_PORT" -u "$MYSQL_USER" -p"$MYSQL_PASS" -e "SELECT 1" &>/dev/null; then
log_error "Cannot connect to MySQL at $MYSQL_HOST:$MYSQL_PORT"
exit 1
fi
log_ok "MySQL: $MYSQL_HOST:$MYSQL_PORT OK"
# 端口冲突
CONFLICT_PORTS=""
for port in 8500 6379 9092 8090 18080 18081 16106 17011 3721; do
if ss -tlnp 2>/dev/null | grep -q ":$port "; then
CONFLICT_PORTS="$CONFLICT_PORTS $port"
fi
done
if [[ -n "$CONFLICT_PORTS" ]]; then
log_warn "Ports already in use:$CONFLICT_PORTS"
log_warn "These services may fail to start. Stop existing processes first."
fi
log_ok "Phase 1 complete"
# ============================================
# Phase 2: 数据库准备
# ============================================
log_info "Phase 2/6: Database preparation"
bash "$SCRIPT_DIR/prepare-db.sh"
log_ok "Phase 2 complete"
# ============================================
# Phase 3: Docker 基础组件启动
# ============================================
log_info "Phase 3/6: Docker infrastructure"
cd "$SCRIPT_DIR"
docker compose -f docker-compose.infra.yml up -d
log_info "Waiting for Consul..."
for i in $(seq 1 30); do
if curl -sf "http://$CONSUL_HOST:$CONSUL_PORT/v1/status/leader" &>/dev/null; then
break
fi
sleep 2
done
log_ok "Consul ready"
log_info "Waiting for Kafka..."
sleep 15
log_ok "Kafka ready"
log_ok "Phase 3 complete"
# ============================================
# Phase 4: 服务准备
# ============================================
log_info "Phase 4/6: Service preparation"
bash "$SCRIPT_DIR/prepare-services.sh"
bash "$SCRIPT_DIR/build-elevator-v2.sh"
log_ok "Phase 4 complete"
# ============================================
# Phase 5: 服务启动
# ============================================
log_info "Phase 5/6: Service startup"
bash "$SCRIPT_DIR/start-all.sh"
log_ok "Phase 5 complete"
# ============================================
# Phase 6: 验证
# ============================================
log_info "Phase 6/6: Verification"
bash "$SCRIPT_DIR/health-check.sh"
bash "$SCRIPT_DIR/verify-functional.sh"
log_ok "Phase 6 complete"
# ============================================
# 汇总
# ============================================
END_TIME=$(date +%s)
DURATION=$((END_TIME - START_TIME))
cat << SUMMARY
╔══════════════════════════════════════════════╗
║ Setup Complete! ║
║ ║
║ Duration: ${DURATION}s ║
║ Consul: http://$CONSUL_HOST:$CONSUL_PORT/ui/ ║
║ Nginx: http://$CONSUL_HOST:$PORT_NGINX/ ║
║ Elevator V2: http://127.0.0.1:$PORT_ELEVATOR_V2 ║
║ Elevator V1: http://127.0.0.1:$PORT_ELEVATOR_V1 ║
║ CRK std: http://127.0.0.1:$PORT_CRK_STD ║
║ Alarm: http://127.0.0.1:$PORT_ALARM ║
╚══════════════════════════════════════════════╝
To stop: bash scripts/test-env/stop-all.sh && docker compose -f scripts/test-env/docker-compose.infra.yml down
SUMMARY