Files
happy-life-star/cleanup-and-restart-services.sh
T
peanut 48df1d68d7 🎉 完成情感博物馆单体架构迁移和数据库集成
 主要完成内容:
- 完整的微服务到单体架构迁移
- 数据库实体类和服务层实现
- 用户认证和管理功能
- AI对话功能集成
- WebSocket实时通信
- 情绪记录管理
- 数据库初始化脚本
- 生产环境部署配置

🏗️ 技术栈:
- Spring Boot 2.7.18 单体架构
- MySQL数据库集成
- JWT认证机制
- WebSocket支持
- Coze AI API集成
- 完整的REST API接口

📊 性能优化:
- 内存使用降低82% (2GB → 363MB)
- 启动时间缩短83% (5分钟 → 30秒)
- 服务数量减少90% (10个 → 1个)
- 部署复杂度大幅简化

🌐 API接口:
- 26个REST API接口
- 3个WebSocket端点
- 完整的CRUD操作
- 数据库读写功能

🚀 部署状态:
- 服务器: 47.111.10.27:8080
- 数据库: emotion (MySQL)
- 前端: http://47.111.10.27/emotion/happy/
- 健康检查: /api/health
2025-07-22 20:29:29 +08:00

304 lines
9.3 KiB
Bash
Executable File

#!/bin/bash
# 清理Docker容器并重启Nacos和Redis服务
# 作者: 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"
}
# 检查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
}
# 清理Docker容器
cleanup_docker_containers() {
log_info "清理Docker容器..."
ssh "$REMOTE_HOST" "
echo '🧹 停止并删除Nacos和Redis相关的Docker容器...'
# 停止并删除emotion-nacos容器
if docker ps -a | grep -q emotion-nacos; then
echo '停止emotion-nacos容器...'
docker stop emotion-nacos 2>/dev/null || true
docker rm emotion-nacos 2>/dev/null || true
echo '✅ emotion-nacos容器已删除'
fi
# 停止并删除emotion-redis容器
if docker ps -a | grep -q emotion-redis; then
echo '停止emotion-redis容器...'
docker stop emotion-redis 2>/dev/null || true
docker rm emotion-redis 2>/dev/null || true
echo '✅ emotion-redis容器已删除'
fi
# 删除相关镜像
echo '🗑️ 删除相关Docker镜像...'
docker rmi nacos/nacos-server:v2.2.0 2>/dev/null || echo 'Nacos镜像不存在'
docker rmi redis:7-alpine 2>/dev/null || echo 'Redis镜像不存在'
echo '✅ Docker容器清理完成'
"
log_success "Docker容器清理完成"
}
# 检查并重启Redis服务
restart_redis() {
log_info "检查并重启Redis服务..."
ssh "$REMOTE_HOST" "
echo '🔍 检查Redis状态...'
# 检查Redis进程
if pgrep -f redis-server > /dev/null; then
echo '✅ Redis进程正在运行'
redis_pid=\$(pgrep -f redis-server)
echo \"Redis PID: \$redis_pid\"
else
echo '❌ Redis进程未运行,尝试启动...'
# 尝试启动Redis
cd /www/server/redis
if [ -f redis-server ]; then
nohup ./redis-server redis.conf > redis.log 2>&1 &
sleep 3
if pgrep -f redis-server > /dev/null; then
echo '✅ Redis启动成功'
else
echo '❌ Redis启动失败'
exit 1
fi
else
echo '❌ Redis可执行文件不存在'
exit 1
fi
fi
# 测试Redis连接
echo '🧪 测试Redis连接...'
if echo 'ping' | ./redis-cli | grep -q PONG; then
echo '✅ Redis连接测试成功'
else
echo '❌ Redis连接测试失败'
exit 1
fi
"
log_success "Redis服务检查完成"
}
# 检查并重启Nacos服务
restart_nacos() {
log_info "检查并重启Nacos服务..."
ssh "$REMOTE_HOST" "
echo '🔍 检查Nacos状态...'
# 检查Nacos进程
if pgrep -f nacos-server.jar > /dev/null; then
echo '✅ Nacos进程正在运行'
nacos_pid=\$(pgrep -f nacos-server.jar)
echo \"Nacos PID: \$nacos_pid\"
# 检查端口监听
if netstat -tlnp | grep :8848 > /dev/null; then
echo '✅ Nacos端口8848正在监听'
else
echo '❌ Nacos端口8848未监听,重启Nacos...'
kill \$nacos_pid 2>/dev/null || true
sleep 5
fi
else
echo '❌ Nacos进程未运行,启动Nacos...'
fi
# 如果Nacos未运行,启动它
if ! pgrep -f nacos-server.jar > /dev/null; then
echo '🚀 启动Nacos服务...'
# 确保目录存在
mkdir -p /data/programs/nacos/{logs,data}
# 检查Nacos安装目录
if [ -d '/home/nacos' ]; then
cd /home/nacos
# 启动Nacos
nohup java -Xms1g -Xmx1g -Xmn512m \\
-Dnacos.standalone=true \\
-Dnacos.core.auth.enabled=true \\
-Dnacos.preferHostnameOverIp=true \\
-Dnacos.home=/home/nacos \\
-jar target/nacos-server.jar \\
--spring.config.additional-location=file:/home/nacos/conf/ \\
--spring.config.name=application \\
--logging.config=/home/nacos/conf/nacos-logback.xml \\
--server.max-http-header-size=524288 > logs/start.out 2>&1 &
echo '⏳ 等待Nacos启动...'
sleep 30
if pgrep -f nacos-server.jar > /dev/null; then
echo '✅ Nacos启动成功'
else
echo '❌ Nacos启动失败'
tail -20 logs/start.out
exit 1
fi
else
echo '❌ Nacos安装目录不存在: /home/nacos'
exit 1
fi
fi
# 测试Nacos连接
echo '🧪 测试Nacos连接...'
sleep 10
if curl -f -s http://localhost:8848/nacos/v1/console/health > /dev/null; then
echo '✅ Nacos健康检查成功'
else
echo '⚠️ Nacos健康检查失败,但进程正在运行'
fi
"
log_success "Nacos服务检查完成"
}
# 更新微服务配置
update_microservice_config() {
log_info "更新微服务配置..."
# 更新所有微服务的配置文件,确保使用正确的地址
for service in gateway user ai auth record growth explore reward websocket stats; do
config_file="backend/emotion-$service/src/main/resources/application.yml"
if [ -f "$config_file" ]; then
log_info "更新 emotion-$service 配置..."
# 备份原始配置
cp "$config_file" "$config_file.bak.$(date +%Y%m%d_%H%M%S)"
# 更新配置
sed -i.tmp "s/127.0.0.1:8848/localhost:8848/g" "$config_file"
sed -i.tmp "s/47.111.10.27:8848/localhost:8848/g" "$config_file"
# 确保Redis配置正确
sed -i.tmp "s/redis.host=.*/redis.host=localhost/g" "$config_file"
sed -i.tmp "s/redis.port=.*/redis.port=6379/g" "$config_file"
# 清理临时文件
rm -f "$config_file.tmp"
log_success "emotion-$service 配置已更新"
else
log_warning "emotion-$service 配置文件不存在: $config_file"
fi
done
log_success "微服务配置更新完成"
}
# 检查服务状态
check_services_status() {
log_info "检查服务状态..."
ssh "$REMOTE_HOST" "
echo '📊 服务状态总结:'
echo '=================='
# 检查Redis
echo -n 'Redis (6379): '
if pgrep -f redis-server > /dev/null && echo 'ping' | /www/server/redis/redis-cli | grep -q PONG; then
echo '✅ 运行正常'
else
echo '❌ 异常'
fi
# 检查Nacos
echo -n 'Nacos (8848): '
if pgrep -f nacos-server.jar > /dev/null && netstat -tlnp | grep :8848 > /dev/null; then
echo '✅ 运行正常'
else
echo '❌ 异常'
fi
# 检查MySQL
echo -n 'MySQL (3306): '
if pgrep -f mysqld > /dev/null && netstat -tlnp | grep :3306 > /dev/null; then
echo '✅ 运行正常'
else
echo '❌ 异常'
fi
echo ''
echo '🔍 端口监听状态:'
netstat -tlnp | grep -E ':(3306|6379|8848)' || echo '没有找到相关端口'
echo ''
echo '🔍 进程状态:'
ps aux | grep -E '(redis-server|nacos-server|mysqld)' | grep -v grep || echo '没有找到相关进程'
"
log_success "服务状态检查完成"
}
# 主函数
main() {
log_info "🚀 开始清理Docker容器并重启服务..."
check_connection
cleanup_docker_containers
restart_redis
restart_nacos
update_microservice_config
check_services_status
log_success "🎉 服务清理和重启完成!"
echo ""
echo "📋 服务访问信息:"
echo " Redis: localhost:6379"
echo " Nacos: http://47.111.10.27:8848/nacos"
echo " MySQL: localhost:3306"
echo ""
echo "🔧 下一步:"
echo " 1. 重新构建微服务: cd backend && ./build-all.sh"
echo " 2. 重新部署微服务: cd backend && ./deploy-remote.sh"
}
# 执行主函数
main "$@"