Files
happy-life-star/install-and-start-nacos.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

253 lines
6.9 KiB
Bash
Executable File

#!/bin/bash
# 安装并启动Nacos服务
# 作者: 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"
}
# 安装Nacos
install_nacos() {
log_info "安装Nacos..."
ssh "$REMOTE_HOST" "
echo '📦 解压Nacos安装包...'
cd /data/programs
# 如果已存在nacos目录,备份
if [ -d 'nacos' ]; then
mv nacos nacos.bak.\$(date +%Y%m%d_%H%M%S)
fi
# 解压新的Nacos
tar -xzf nacos-server-3.0.2.tar.gz
# 检查解压结果
if [ -d 'nacos' ]; then
echo '✅ Nacos解压成功'
ls -la nacos/
else
echo '❌ Nacos解压失败'
exit 1
fi
echo '🔧 配置Nacos...'
cd nacos/conf
# 备份原始配置
cp application.properties application.properties.bak
# 配置Nacos为单机模式
cat > application.properties << 'EOF'
# Nacos配置文件
server.servlet.contextPath=/nacos
server.port=8848
# 单机模式
nacos.standalone=true
# 认证配置
nacos.core.auth.enabled=true
nacos.core.auth.server.identity.key=serverIdentity
nacos.core.auth.server.identity.value=security
nacos.core.auth.plugin.nacos.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789
# 数据库配置(使用内置数据库)
spring.datasource.platform=
# 日志配置
nacos.logs.path=/data/programs/nacos/logs
EOF
echo '✅ Nacos配置完成'
"
log_success "Nacos安装完成"
}
# 启动Nacos
start_nacos() {
log_info "启动Nacos..."
ssh "$REMOTE_HOST" "
echo '🚀 启动Nacos服务...'
cd /data/programs/nacos
# 确保日志目录存在
mkdir -p logs
# 启动Nacos
nohup java -Xms1g -Xmx1g -Xmn512m \\
-Dnacos.standalone=true \\
-Dnacos.home=/data/programs/nacos \\
-Dloader.path=/data/programs/nacos/plugins,/data/programs/nacos/plugins/health,/data/programs/nacos/plugins/cmdb,/data/programs/nacos/plugins/selector \\
-jar target/nacos-server.jar \\
--spring.config.additional-location=file:/data/programs/nacos/conf/ \\
--spring.config.name=application \\
--logging.config=/data/programs/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进程启动成功'
nacos_pid=\$(pgrep -f nacos-server.jar)
echo \"Nacos PID: \$nacos_pid\"
else
echo '❌ Nacos进程启动失败'
echo '查看启动日志:'
tail -20 logs/start.out
exit 1
fi
# 检查端口监听
echo '🔍 检查端口监听...'
sleep 10
if netstat -tlnp | grep :8848 > /dev/null; then
echo '✅ Nacos端口8848正在监听'
else
echo '⚠️ Nacos端口8848未监听,可能还在启动中'
fi
# 测试健康检查
echo '🧪 测试Nacos健康检查...'
sleep 10
if curl -f -s http://localhost:8848/nacos/v1/console/health > /dev/null; then
echo '✅ Nacos健康检查成功'
else
echo '⚠️ Nacos健康检查失败,但进程正在运行'
echo '查看最新日志:'
tail -10 logs/nacos.log 2>/dev/null || tail -10 logs/start.out
fi
"
log_success "Nacos启动完成"
}
# 检查服务状态
check_services() {
log_info "检查服务状态..."
ssh "$REMOTE_HOST" "
echo '📊 服务状态总结:'
echo '=================='
# 检查Redis
echo -n 'Redis (6379): '
if pgrep -f redis-server > /dev/null && netstat -tlnp | grep :6379 > /dev/null; then
echo '✅ 运行正常'
else
echo '❌ 异常'
fi
# 检查Nacos
echo -n 'Nacos (8848): '
if pgrep -f nacos-server.jar > /dev/null; then
if netstat -tlnp | grep :8848 > /dev/null; then
echo '✅ 运行正常'
else
echo '🔄 启动中'
fi
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 '没有找到相关端口'
"
log_success "服务状态检查完成"
}
# 测试Nacos访问
test_nacos_access() {
log_info "测试Nacos访问..."
# 等待一段时间确保Nacos完全启动
sleep 20
if curl -f -s "http://47.111.10.27:8848/nacos" > /dev/null; then
log_success "✅ Nacos外部访问正常: http://47.111.10.27:8848/nacos"
else
log_warning "⚠️ Nacos外部访问失败,可能还在启动中"
# 检查防火墙
ssh "$REMOTE_HOST" "
echo '🔍 检查防火墙设置...'
if command -v ufw >/dev/null 2>&1; then
ufw allow 8848/tcp 2>/dev/null || echo 'UFW规则添加失败'
fi
if command -v firewall-cmd >/dev/null 2>&1; then
firewall-cmd --permanent --add-port=8848/tcp 2>/dev/null || echo 'Firewall规则添加失败'
firewall-cmd --reload 2>/dev/null || echo 'Firewall重载失败'
fi
"
fi
}
# 主函数
main() {
log_info "🚀 开始安装并启动Nacos..."
install_nacos
start_nacos
check_services
test_nacos_access
log_success "🎉 Nacos安装和启动完成!"
echo ""
echo "📋 服务访问信息:"
echo " Redis: localhost:6379 ✅"
echo " Nacos: http://47.111.10.27:8848/nacos"
echo " MySQL: localhost:3306"
echo ""
echo "🔑 Nacos登录信息:"
echo " 用户名: nacos"
echo " 密码: nacos"
echo ""
echo "🔧 下一步:"
echo " 1. 等待2-3分钟让Nacos完全启动"
echo " 2. 访问 http://47.111.10.27:8848/nacos 测试"
echo " 3. 重新部署微服务: cd backend && ./deploy-remote.sh"
}
# 执行主函数
main "$@"