#!/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 "$@"