#!/bin/bash # 重启远程服务器中间件脚本 # 作者: emotion-museum # 日期: 2025-07-21 set -e REMOTE_HOST="root@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" } # 重启MySQL restart_mysql() { log_info "重启MySQL..." ssh "$REMOTE_HOST" " # 停止可能存在的MySQL容器 docker stop emotion-mysql 2>/dev/null || true docker rm emotion-mysql 2>/dev/null || true # 启动MySQL容器,使用现有数据 docker run -d \\ --name emotion-mysql \\ --restart unless-stopped \\ -p 3306:3306 \\ -v /data/programs/mysql:/var/lib/mysql \\ -e MYSQL_ROOT_PASSWORD='EmotionMuseum2025*#' \\ -e TZ=Asia/Shanghai \\ mysql:8.0 \\ --default-authentication-plugin=mysql_native_password echo 'MySQL容器启动完成' " # 等待MySQL启动 log_info "等待MySQL启动..." sleep 15 # 检查MySQL状态 if ssh "$REMOTE_HOST" "docker exec emotion-mysql mysqladmin ping -h localhost --silent"; then log_success "MySQL启动成功" else log_error "MySQL启动失败" return 1 fi } # 重启Redis restart_redis() { log_info "重启Redis..." ssh "$REMOTE_HOST" " # 停止可能存在的Redis容器 docker stop emotion-redis 2>/dev/null || true docker rm emotion-redis 2>/dev/null || true # 启动Redis容器,使用现有数据 docker run -d \\ --name emotion-redis \\ --restart unless-stopped \\ -p 6379:6379 \\ -v /data/programs/redis:/data \\ redis:7-alpine \\ redis-server --appendonly yes echo 'Redis容器启动完成' " # 等待Redis启动 log_info "等待Redis启动..." sleep 5 # 检查Redis状态 if ssh "$REMOTE_HOST" "docker exec emotion-redis redis-cli ping" | grep -q "PONG"; then log_success "Redis启动成功" else log_error "Redis启动失败" return 1 fi } # 重启Nacos restart_nacos() { 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 \\ -v /data/programs/nacos/logs:/home/nacos/logs \\ -v /data/programs/nacos/data:/home/nacos/data \\ -e MODE=standalone \\ -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 \\ nacos/nacos-server:v2.2.0 echo 'Nacos容器启动完成' " # 等待Nacos启动 log_info "等待Nacos启动..." sleep 30 # 检查Nacos状态 if ssh "$REMOTE_HOST" "curl -f -s http://localhost:8848/nacos/v1/console/health" > /dev/null; then log_success "Nacos启动成功" else log_warning "Nacos可能还在启动中,请稍后检查" fi } # 创建Docker网络 create_network() { log_info "创建Docker网络..." ssh "$REMOTE_HOST" "docker network create emotion-network 2>/dev/null || echo 'network already exists'" } # 检查中间件状态 check_status() { log_info "检查中间件状态..." ssh "$REMOTE_HOST" " echo '=== 容器状态 ===' docker ps --format 'table {{.Names}}\t{{.Status}}\t{{.Ports}}' | grep -E '(mysql|redis|nacos)' echo '' echo '=== 端口监听 ===' netstat -tlnp | grep -E ':(3306|6379|8848)' || echo '端口未监听' " } # 主函数 main() { log_info "🚀 开始重启远程服务器中间件..." # 检查SSH连接 if ! ssh -o ConnectTimeout=10 "$REMOTE_HOST" "echo 'SSH连接成功'" > /dev/null 2>&1; then log_error "无法连接到远程服务器: $REMOTE_HOST" exit 1 fi # 创建网络 create_network # 重启中间件 restart_mysql restart_redis restart_nacos # 检查状态 check_status log_success "🎉 中间件重启完成!" echo "" echo "📋 连接信息:" echo " MySQL: $REMOTE_HOST:3306 (root/EmotionMuseum2025*#)" echo " Redis: $REMOTE_HOST:6379" echo " Nacos: http://$REMOTE_HOST:8848/nacos (nacos/Peanut2817*#)" } # 执行主函数 main "$@"