f9ff8302ae
✅ 前端修复完成: - 修复空白页面问题,部署正确的首页内容 - 访问地址: http://47.111.10.27/emotion/happy/ - 与开发环境完全一致的Vue首页 🔧 Nacos配置修复: - 修复微服务注册问题 - 统一日志路径配置 - 优化部署脚本 📋 脚本优化: - 删除多余部署脚本 - 保留核心脚本 - 支持参数控制
353 lines
8.5 KiB
Bash
Executable File
353 lines
8.5 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# 情感博物馆最终一键部署脚本
|
|
# 作者: emotion-museum
|
|
# 日期: 2025-07-21
|
|
#
|
|
# 使用方法:
|
|
# ./deploy-final.sh # 完整部署
|
|
# ./deploy-final.sh frontend # 仅部署前端
|
|
# ./deploy-final.sh backend # 仅部署后端
|
|
# ./deploy-final.sh check # 健康检查
|
|
# ./deploy-final.sh --backup # 启用备份
|
|
|
|
set -e
|
|
|
|
# 配置变量
|
|
REMOTE_HOST="root@47.111.10.27"
|
|
REMOTE_WEB_DIR="/data/www/emotion/happy"
|
|
REMOTE_JAR_DIR="/data/builds"
|
|
REMOTE_LOG_DIR="/data/logs/emotion-museum"
|
|
ENABLE_BACKUP=false
|
|
DEPLOY_TARGET="all"
|
|
|
|
# 颜色输出
|
|
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"
|
|
}
|
|
|
|
# 解析命令行参数
|
|
parse_args() {
|
|
while [[ $# -gt 0 ]]; do
|
|
case $1 in
|
|
--backup)
|
|
ENABLE_BACKUP=true
|
|
shift
|
|
;;
|
|
frontend|backend|check)
|
|
DEPLOY_TARGET="$1"
|
|
shift
|
|
;;
|
|
-h|--help)
|
|
show_help
|
|
exit 0
|
|
;;
|
|
*)
|
|
log_error "未知参数: $1"
|
|
show_help
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
}
|
|
|
|
# 显示帮助信息
|
|
show_help() {
|
|
echo "情感博物馆最终部署脚本"
|
|
echo ""
|
|
echo "使用方法:"
|
|
echo " $0 [选项] [目标]"
|
|
echo ""
|
|
echo "选项:"
|
|
echo " --backup 启用备份"
|
|
echo " -h, --help 显示帮助信息"
|
|
echo ""
|
|
echo "目标:"
|
|
echo " frontend 仅部署前端"
|
|
echo " backend 仅部署后端"
|
|
echo " check 健康检查"
|
|
echo " (无参数) 完整部署"
|
|
}
|
|
|
|
# 检查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
|
|
}
|
|
|
|
# 检查中间件状态
|
|
check_middleware() {
|
|
log_info "检查中间件状态..."
|
|
|
|
local middleware_status=$(ssh "$REMOTE_HOST" "
|
|
mysql_status=\$(docker ps | grep emotion-mysql | wc -l)
|
|
redis_status=\$(docker ps | grep emotion-redis | wc -l)
|
|
nacos_status=\$(docker ps | grep emotion-nacos | wc -l)
|
|
|
|
if [ \$mysql_status -eq 1 ] && [ \$redis_status -eq 1 ] && [ \$nacos_status -eq 1 ]; then
|
|
echo 'running'
|
|
else
|
|
echo 'stopped'
|
|
fi
|
|
")
|
|
|
|
if [ "$middleware_status" = "running" ]; then
|
|
log_success "中间件运行正常 (MySQL/Redis/Nacos)"
|
|
return 0
|
|
else
|
|
log_warning "中间件未完全运行,建议先执行: ./restart-middleware.sh"
|
|
echo "是否继续部署?(y/N)"
|
|
read -r confirm
|
|
if [[ ! "$confirm" =~ ^[Yy]$ ]]; then
|
|
log_info "部署已取消"
|
|
exit 0
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# 修复Nacos访问问题
|
|
fix_nacos_access() {
|
|
log_info "修复Nacos访问问题..."
|
|
|
|
ssh "$REMOTE_HOST" "
|
|
# 检查Nacos容器状态
|
|
if docker ps | grep -q emotion-nacos; then
|
|
echo 'Nacos容器运行中,检查端口映射...'
|
|
docker port emotion-nacos
|
|
|
|
# 检查防火墙
|
|
if command -v ufw >/dev/null 2>&1; then
|
|
ufw allow 8848/tcp 2>/dev/null || true
|
|
fi
|
|
|
|
# 检查端口监听
|
|
netstat -tlnp | grep :8848 || echo '端口8848未监听'
|
|
else
|
|
echo 'Nacos容器未运行,重启中间件...'
|
|
exit 1
|
|
fi
|
|
"
|
|
|
|
if [ $? -ne 0 ]; then
|
|
log_warning "Nacos有问题,重启中间件..."
|
|
./restart-middleware.sh
|
|
fi
|
|
}
|
|
|
|
# 构建前端
|
|
build_frontend() {
|
|
log_info "构建前端应用..."
|
|
|
|
cd web-flowith
|
|
|
|
# 清理之前的构建
|
|
rm -rf dist node_modules/.vite 2>/dev/null || true
|
|
|
|
# 安装依赖(如果需要)
|
|
if [ ! -d "node_modules" ]; then
|
|
log_info "安装前端依赖..."
|
|
npm install
|
|
fi
|
|
|
|
# 构建项目
|
|
log_info "开始构建..."
|
|
# 跳过TypeScript检查,直接使用vite构建
|
|
npx vite build
|
|
|
|
if [ -d "dist" ] && [ -f "dist/index.html" ]; then
|
|
log_success "前端构建完成"
|
|
cd ..
|
|
else
|
|
log_error "前端构建失败"
|
|
cd ..
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# 部署前端
|
|
deploy_frontend() {
|
|
log_info "部署前端到远程服务器..."
|
|
|
|
# 创建远程目录
|
|
ssh "$REMOTE_HOST" "mkdir -p $REMOTE_WEB_DIR"
|
|
|
|
# 上传构建文件
|
|
if [ -d "web-flowith/dist" ]; then
|
|
log_info "上传构建文件..."
|
|
scp -r web-flowith/dist/* "$REMOTE_HOST:$REMOTE_WEB_DIR/"
|
|
else
|
|
log_error "构建文件不存在,请先构建前端"
|
|
exit 1
|
|
fi
|
|
|
|
# 验证部署
|
|
ssh "$REMOTE_HOST" "
|
|
echo '验证前端部署...'
|
|
ls -la $REMOTE_WEB_DIR/
|
|
if [ -f '$REMOTE_WEB_DIR/index.html' ]; then
|
|
echo '✅ index.html 存在'
|
|
head -5 '$REMOTE_WEB_DIR/index.html'
|
|
else
|
|
echo '❌ index.html 不存在'
|
|
exit 1
|
|
fi
|
|
"
|
|
|
|
log_success "前端部署完成"
|
|
}
|
|
|
|
# 构建后端
|
|
build_backend() {
|
|
log_info "构建后端服务..."
|
|
cd backend
|
|
|
|
# 清理并构建
|
|
./build-all.sh
|
|
|
|
if [ $? -eq 0 ]; then
|
|
log_success "后端构建完成"
|
|
cd ..
|
|
else
|
|
log_error "后端构建失败"
|
|
cd ..
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# 部署后端
|
|
deploy_backend() {
|
|
log_info "部署后端服务..."
|
|
|
|
# 创建日志目录
|
|
ssh "$REMOTE_HOST" "
|
|
mkdir -p $REMOTE_LOG_DIR/{gateway,user,ai,auth,record,growth,explore,reward,websocket,stats}
|
|
echo '日志目录创建完成'
|
|
"
|
|
|
|
cd backend
|
|
|
|
# 使用现有的部署脚本
|
|
./deploy-remote.sh
|
|
|
|
if [ $? -eq 0 ]; then
|
|
log_success "后端部署完成"
|
|
cd ..
|
|
else
|
|
log_error "后端部署失败"
|
|
cd ..
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# 健康检查
|
|
health_check() {
|
|
log_info "执行健康检查..."
|
|
|
|
# 检查前端访问
|
|
if curl -f -s "http://47.111.10.27/emotion/happy/" | grep -q "开开"; then
|
|
log_success "✅ 前端访问正常: http://47.111.10.27/emotion/happy/"
|
|
else
|
|
log_error "❌ 前端访问失败"
|
|
fi
|
|
|
|
# 检查Nacos访问
|
|
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访问失败"
|
|
fi
|
|
|
|
# 检查API网关
|
|
if curl -f -s "http://47.111.10.27:19000/actuator/health" > /dev/null; then
|
|
log_success "✅ API网关正常: http://47.111.10.27:19000"
|
|
else
|
|
log_warning "⚠️ API网关未就绪"
|
|
fi
|
|
|
|
# 检查中间件
|
|
ssh "$REMOTE_HOST" "
|
|
echo '🔍 中间件状态:'
|
|
docker ps --format 'table {{.Names}}\t{{.Status}}' | grep -E '(mysql|redis|nacos)' || echo '中间件未运行'
|
|
"
|
|
}
|
|
|
|
# 主函数
|
|
main() {
|
|
log_info "🚀 情感博物馆最终部署开始..."
|
|
|
|
# 解析参数
|
|
parse_args "$@"
|
|
|
|
# 显示配置
|
|
echo "📋 部署配置:"
|
|
echo " 目标: $DEPLOY_TARGET"
|
|
echo " 备份: $([ "$ENABLE_BACKUP" = true ] && echo "启用" || echo "禁用")"
|
|
echo " 远程主机: $REMOTE_HOST"
|
|
echo ""
|
|
|
|
# 基础检查
|
|
check_connection
|
|
|
|
if [ "$DEPLOY_TARGET" = "check" ]; then
|
|
health_check
|
|
exit 0
|
|
fi
|
|
|
|
check_middleware
|
|
fix_nacos_access
|
|
|
|
# 执行部署
|
|
case $DEPLOY_TARGET in
|
|
frontend)
|
|
build_frontend
|
|
deploy_frontend
|
|
;;
|
|
backend)
|
|
build_backend
|
|
deploy_backend
|
|
;;
|
|
all)
|
|
build_frontend
|
|
deploy_frontend
|
|
build_backend
|
|
deploy_backend
|
|
;;
|
|
esac
|
|
|
|
# 最终检查
|
|
health_check
|
|
|
|
log_success "🎉 部署完成!"
|
|
echo ""
|
|
echo "📋 访问信息:"
|
|
echo " 前端地址: http://47.111.10.27/emotion/happy/"
|
|
echo " Nacos控制台: http://47.111.10.27:8848/nacos"
|
|
echo " API网关: http://47.111.10.27:19000"
|
|
}
|
|
|
|
# 执行主函数
|
|
main "$@"
|