#!/bin/bash # 修复Nacos配置和微服务注册问题 # 作者: emotion-museum # 日期: 2025-07-21 set -e REMOTE_HOST="root@47.111.10.27" REMOTE_IP="47.111.10.27" # 颜色输出 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' log_info() { echo -e "${BLUE}[INFO]${NC} $(date '+%Y-%m-%d %H:%M:%S') - $1" } log_success() { echo -e "${GREEN}[SUCCESS]${NC} $(date '+%Y-%m-%d %H:%M:%S') - $1" } log_warning() { echo -e "${YELLOW}[WARNING]${NC} $(date '+%Y-%m-%d %H:%M:%S') - $1" } log_error() { echo -e "${RED}[ERROR]${NC} $(date '+%Y-%m-%d %H:%M:%S') - $1" } # 检查SSH连接 check_connection() { log_info "检查远程服务器连接..." if ssh -o ConnectTimeout=10 "$REMOTE_HOST" "echo 'SSH连接成功'" > /dev/null 2>&1; then log_success "远程服务器连接正常" else log_error "无法连接到远程服务器: $REMOTE_HOST" exit 1 fi } # 修复Nacos容器配置 fix_nacos_container() { log_info "修复Nacos容器配置..." ssh "$REMOTE_HOST" " # 停止现有Nacos容器 docker stop emotion-nacos 2>/dev/null || true docker rm emotion-nacos 2>/dev/null || true # 启动新的Nacos容器,确保正确的网络配置 docker run -d \\ --name emotion-nacos \\ --restart unless-stopped \\ -p 8848:8848 \\ -p 9848:9848 \\ -p 9849:9849 \\ -v /data/programs/nacos/logs:/home/nacos/logs \\ -v /data/programs/nacos/data:/home/nacos/data \\ -e MODE=standalone \\ -e PREFER_HOST_MODE=hostname \\ -e SPRING_DATASOURCE_PLATFORM=mysql \\ -e MYSQL_SERVICE_HOST=emotion-mysql \\ -e MYSQL_SERVICE_PORT=3306 \\ -e MYSQL_SERVICE_DB_NAME=nacos_config \\ -e MYSQL_SERVICE_USER=root \\ -e MYSQL_SERVICE_PASSWORD='EmotionMuseum2025*#' \\ -e NACOS_AUTH_ENABLE=true \\ -e NACOS_AUTH_TOKEN_EXPIRE_SECONDS=18000 \\ -e NACOS_AUTH_TOKEN=SecretKey012345678901234567890123456789012345678901234567890123456789 \\ -e NACOS_AUTH_IDENTITY_KEY=serverIdentity \\ -e NACOS_AUTH_IDENTITY_VALUE=security \\ --network bridge \\ nacos/nacos-server:v2.2.0 echo 'Nacos容器启动完成' # 等待Nacos启动 echo '等待Nacos启动...' sleep 30 # 检查Nacos状态 curl -f -s http://localhost:8848/nacos/v1/console/health || echo 'Nacos健康检查失败' " log_success "Nacos容器配置修复完成" } # 修复微服务配置 fix_microservice_config() { log_info "修复微服务配置..." # 更新所有微服务的配置文件 for service in gateway user ai auth record growth explore reward websocket stats; do log_info "更新 emotion-$service 配置..." # 检查配置文件是否存在 if [ -f "backend/emotion-$service/src/main/resources/application.yml" ]; then # 备份原始配置 cp "backend/emotion-$service/src/main/resources/application.yml" "backend/emotion-$service/src/main/resources/application.yml.bak" # 更新Nacos配置 sed -i.bak "s/127.0.0.1:8848/$REMOTE_IP:8848/g" "backend/emotion-$service/src/main/resources/application.yml" sed -i.bak "s/localhost:8848/$REMOTE_IP:8848/g" "backend/emotion-$service/src/main/resources/application.yml" # 更新日志配置 if grep -q "logging:" "backend/emotion-$service/src/main/resources/application.yml"; then sed -i.bak "s|logging:|logging:\\n file:\\n path: /data/logs/emotion-museum/$service|g" "backend/emotion-$service/src/main/resources/application.yml" else echo " logging: file: path: /data/logs/emotion-museum/$service " >> "backend/emotion-$service/src/main/resources/application.yml" fi log_success "emotion-$service 配置已更新" else log_warning "emotion-$service 配置文件不存在" fi done log_success "微服务配置修复完成" } # 重新构建和部署微服务 rebuild_and_deploy() { log_info "重新构建和部署微服务..." # 构建所有服务 cd backend ./build-all.sh # 部署到远程服务器 ./deploy-remote.sh cd .. log_success "微服务重新部署完成" } # 检查微服务注册状态 check_service_registration() { log_info "检查微服务注册状态..." # 等待服务启动 sleep 30 # 检查Nacos服务列表 ssh "$REMOTE_HOST" " echo '检查Nacos服务列表...' curl -s -X GET 'http://localhost:8848/nacos/v1/ns/service/list?pageNo=1&pageSize=10' \\ -H 'Content-Type: application/x-www-form-urlencoded' \\ | grep -o '\"count\":[0-9]*' || echo 'Nacos服务列表获取失败' echo '' echo '检查微服务健康状态...' for port in 19000 19001 19002 19008; do echo -n \"端口 \$port: \" curl -f -s \"http://localhost:\$port/actuator/health\" > /dev/null && echo '✅ 健康' || echo '❌ 未就绪' done " log_success "微服务注册检查完成" } # 主函数 main() { log_info "🚀 开始修复Nacos配置和微服务注册问题..." check_connection fix_nacos_container fix_microservice_config rebuild_and_deploy check_service_registration log_success "🎉 Nacos配置和微服务注册问题修复完成!" echo "" echo "📋 访问信息:" echo " Nacos控制台: http://47.111.10.27:8848/nacos" echo " API网关: http://47.111.10.27:19000" echo " 日志目录: /data/logs/emotion-museum/{service}" } # 执行主函数 main "$@"