This commit is contained in:
2025-07-25 16:18:33 +08:00
parent c09cbc3f01
commit a4c6140ed5
50 changed files with 2249 additions and 1599 deletions
+2 -243
View File
@@ -1,245 +1,4 @@
#!/bin/bash
# 单体服务部署脚本
# 作者: emotion-museum
# 日期: 2025-07-21
set -e
REMOTE_HOST="root@47.111.10.27"
REMOTE_JAR_DIR="/data/builds"
REMOTE_LOG_DIR="/data/logs/emotion-museum"
SERVICE_NAME="emotion-single"
JAR_FILE="target/emotion-single-1.0.0.jar"
# 颜色输出
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"
}
# 检查JAR文件
check_jar() {
log_info "检查JAR文件..."
if [ ! -f "$JAR_FILE" ]; then
log_error "JAR文件不存在: $JAR_FILE"
log_info "请先运行: ./build.sh"
exit 1
fi
log_success "JAR文件存在: $JAR_FILE"
}
# 检查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
}
# 停止旧的微服务
stop_old_services() {
log_info "停止旧的微服务..."
ssh "$REMOTE_HOST" "
echo '🛑 停止所有emotion相关的Java进程...'
# 停止所有emotion相关的Java进程
pkill -f 'emotion-.*\.jar' 2>/dev/null || echo '没有找到emotion相关进程'
# 等待进程完全停止
sleep 5
# 检查是否还有残留进程
REMAINING=\$(ps aux | grep -E 'emotion-.*\.jar' | grep -v grep | wc -l)
if [ \$REMAINING -gt 0 ]; then
echo '强制停止残留进程...'
pkill -9 -f 'emotion-.*\.jar' 2>/dev/null || true
sleep 3
fi
echo '✅ 旧服务停止完成'
"
log_success "旧的微服务已停止"
}
# 清理旧的部署文件
cleanup_old_files() {
log_info "清理旧的部署文件..."
ssh "$REMOTE_HOST" "
echo '🧹 清理旧的JAR文件...'
rm -f $REMOTE_JAR_DIR/emotion-*.jar 2>/dev/null || true
echo '🧹 清理旧的日志文件...'
find $REMOTE_LOG_DIR -name '*.log' -mtime +7 -delete 2>/dev/null || true
echo '✅ 清理完成'
"
log_success "旧的部署文件已清理"
}
# 创建必要目录
create_directories() {
log_info "创建必要目录..."
ssh "$REMOTE_HOST" "
mkdir -p $REMOTE_JAR_DIR
mkdir -p $REMOTE_LOG_DIR
mkdir -p /data/uploads/emotion-museum
echo '✅ 目录创建完成'
"
log_success "必要目录已创建"
}
# 上传JAR文件
upload_jar() {
log_info "上传JAR文件..."
scp "$JAR_FILE" "$REMOTE_HOST:$REMOTE_JAR_DIR/"
# 验证上传
REMOTE_SIZE=$(ssh "$REMOTE_HOST" "ls -lh $REMOTE_JAR_DIR/emotion-single-1.0.0.jar | awk '{print \$5}'")
log_success "JAR文件上传成功 (远程大小: $REMOTE_SIZE)"
}
# 启动服务
start_service() {
log_info "启动单体服务..."
ssh "$REMOTE_HOST" "
cd $REMOTE_JAR_DIR
echo '🚀 启动emotion-single服务...'
nohup java -Xms512m -Xmx1024m \\
-Dspring.profiles.active=prod \\
-Dserver.port=8080 \\
-jar emotion-single-1.0.0.jar \\
> $REMOTE_LOG_DIR/emotion-single.log 2>&1 &
echo '⏳ 等待服务启动...'
sleep 15
# 检查进程
if pgrep -f emotion-single-1.0.0.jar > /dev/null; then
echo '✅ 服务进程启动成功'
else
echo '❌ 服务进程启动失败'
tail -20 $REMOTE_LOG_DIR/emotion-single.log
exit 1
fi
# 检查端口
if netstat -tlnp | grep :8080 > /dev/null; then
echo '✅ 服务端口8080正在监听'
else
echo '⚠️ 服务端口8080未监听,可能还在启动中'
fi
"
log_success "单体服务启动完成"
}
# 健康检查
health_check() {
log_info "执行健康检查..."
# 等待服务完全启动
sleep 10
# 检查健康端点
if curl -f -s "http://47.111.10.27:8080/api/health" > /dev/null; then
log_success "✅ 健康检查通过: http://47.111.10.27:8080/api/health"
else
log_warning "⚠️ 健康检查失败,查看日志..."
ssh "$REMOTE_HOST" "tail -20 $REMOTE_LOG_DIR/emotion-single.log"
fi
}
# 显示服务状态
show_status() {
log_info "显示服务状态..."
ssh "$REMOTE_HOST" "
echo '📊 服务状态:'
echo '=================='
# 检查进程
echo -n 'emotion-single进程: '
if pgrep -f emotion-single-1.0.0.jar > /dev/null; then
echo '✅ 运行中'
ps aux | grep emotion-single-1.0.0.jar | grep -v grep | head -1
else
echo '❌ 未运行'
fi
# 检查端口
echo -n 'emotion-single端口(8080): '
if netstat -tlnp | grep :8080 > /dev/null; then
echo '✅ 监听中'
else
echo '❌ 未监听'
fi
echo ''
echo '📋 访问地址:'
echo ' 健康检查: http://47.111.10.27:8080/api/health'
echo ' 前端页面: http://47.111.10.27/emotion/happy/'
"
log_success "服务状态检查完成"
}
# 主函数
main() {
log_info "🚀 开始部署emotion-single服务..."
check_jar
check_connection
stop_old_services
cleanup_old_files
create_directories
upload_jar
start_service
health_check
show_status
log_success "🎉 部署完成!"
echo ""
echo "📋 部署结果:"
echo " ✅ 单体服务已启动"
echo " ✅ 旧的微服务已清理"
echo " ✅ 服务正常运行"
echo ""
echo "🔧 下一步:"
echo " 1. 访问前端: http://47.111.10.27/emotion/happy/"
echo " 2. 测试API: http://47.111.10.27:8080/api/health"
echo " 3. 查看日志: ssh $REMOTE_HOST 'tail -f $REMOTE_LOG_DIR/emotion-single.log'"
}
# 执行主函数
main "$@"
mvn clean package -Pprod
echo "后端已打包,target 目录下的 jar 包可部署到服务器"