#!/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 2181 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" # Stop and remove any existing v2test containers and conflicting containers log_info "Cleaning up existing containers..." docker rm -f v2test-consul v2test-redis v2test-kafka v2test-zookeeper v2test-nginx \ cw-frontend-local-nginx v2-test-redis 2>/dev/null || true docker compose -f docker-compose.infra.yml down --remove-orphans 2>/dev/null || true 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