50c63f1b1a
🐛 Java版本修复: - 修复Docker镜像使用Java 17 Alpine版本 - 解决Java 8与Spring Boot 17编译版本不兼容问题 - 修复Alpine Linux包管理器命令(apk替代apt-get) 🚀 一键部署脚本: - 新增one-click-deploy.sh一键部署脚本 - 支持完整部署、仅前端、仅后端、健康检查模式 - 集成环境检查、构建、部署、健康检查全流程 - 提供详细的部署报告和访问地址 ✅ 部署优化: - 使用openjdk:17-alpine镜像确保Java版本兼容 - 优化Docker构建流程和错误处理 - 完善健康检查和状态监控 🔧 使用方法: - ./one-click-deploy.sh # 完整部署 - ./one-click-deploy.sh frontend # 仅部署前端 - ./one-click-deploy.sh backend # 仅部署后端 - ./one-click-deploy.sh check # 健康检查
290 lines
7.0 KiB
Bash
Executable File
290 lines
7.0 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# 情感博物馆一键部署脚本
|
|
# 作者: emotion-museum
|
|
# 日期: 2025-07-21
|
|
# 用途: 本地构建并部署前后端到远程服务器
|
|
|
|
set -e
|
|
|
|
# 配置变量
|
|
REMOTE_HOST="root@47.111.10.27"
|
|
DEPLOY_ENV="${DEPLOY_ENV:-test}"
|
|
PROJECT_NAME="emotion-museum"
|
|
|
|
# 颜色输出
|
|
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"
|
|
}
|
|
|
|
# 检查环境
|
|
check_environment() {
|
|
log_info "检查本地环境..."
|
|
|
|
# 检查Node.js
|
|
if ! command -v node &> /dev/null; then
|
|
log_error "Node.js未安装,请先安装Node.js"
|
|
exit 1
|
|
fi
|
|
log_info "Node.js版本: $(node --version)"
|
|
|
|
# 检查npm
|
|
if ! command -v npm &> /dev/null; then
|
|
log_error "npm未安装,请先安装npm"
|
|
exit 1
|
|
fi
|
|
log_info "npm版本: $(npm --version)"
|
|
|
|
# 检查Java
|
|
if ! command -v java &> /dev/null; then
|
|
log_error "Java未安装,请先安装Java 17"
|
|
exit 1
|
|
fi
|
|
log_info "Java版本: $(java --version | head -1)"
|
|
|
|
# 检查Maven
|
|
if ! command -v mvn &> /dev/null; then
|
|
log_error "Maven未安装,请先安装Maven"
|
|
exit 1
|
|
fi
|
|
log_info "Maven版本: $(mvn --version | head -1)"
|
|
|
|
# 检查SSH连接
|
|
log_info "检查远程服务器连接..."
|
|
if ssh -o ConnectTimeout=10 "$REMOTE_HOST" "echo 'SSH连接成功'" > /dev/null 2>&1; then
|
|
log_success "远程服务器连接正常"
|
|
else
|
|
log_error "无法连接到远程服务器: $REMOTE_HOST"
|
|
log_error "请检查SSH密钥配置或网络连接"
|
|
exit 1
|
|
fi
|
|
|
|
log_success "环境检查通过"
|
|
}
|
|
|
|
# 构建前端
|
|
build_frontend() {
|
|
log_info "开始构建前端..."
|
|
|
|
cd web-flowith
|
|
|
|
# 安装依赖
|
|
log_info "安装前端依赖..."
|
|
npm install
|
|
|
|
# 构建前端
|
|
log_info "构建前端项目..."
|
|
npm run build
|
|
|
|
# 检查构建结果
|
|
if [ ! -d "dist" ]; then
|
|
log_error "前端构建失败,dist目录不存在"
|
|
exit 1
|
|
fi
|
|
|
|
log_success "前端构建完成"
|
|
cd ..
|
|
}
|
|
|
|
# 构建后端
|
|
build_backend() {
|
|
log_info "开始构建后端..."
|
|
|
|
cd backend
|
|
|
|
# 使用我们优化的构建脚本
|
|
log_info "使用优化的构建脚本..."
|
|
./build-all.sh
|
|
|
|
log_success "后端构建完成"
|
|
cd ..
|
|
}
|
|
|
|
# 部署前端
|
|
deploy_frontend() {
|
|
log_info "开始部署前端..."
|
|
|
|
cd web-flowith
|
|
./deploy.sh
|
|
cd ..
|
|
|
|
log_success "前端部署完成"
|
|
}
|
|
|
|
# 部署后端
|
|
deploy_backend() {
|
|
log_info "开始部署后端..."
|
|
|
|
cd backend
|
|
|
|
# 使用远程部署脚本
|
|
log_info "使用优化的远程部署脚本..."
|
|
./deploy-remote.sh
|
|
|
|
log_success "后端部署完成"
|
|
cd ..
|
|
}
|
|
|
|
# 健康检查
|
|
health_check() {
|
|
log_info "执行健康检查..."
|
|
|
|
# 等待服务启动
|
|
log_info "等待服务启动..."
|
|
sleep 30
|
|
|
|
# 检查关键服务
|
|
local services=(
|
|
"19000:emotion-gateway"
|
|
"19001:emotion-user"
|
|
"19002:emotion-ai"
|
|
"19008:emotion-auth"
|
|
)
|
|
|
|
local success_count=0
|
|
local total_count=${#services[@]}
|
|
|
|
for service in "${services[@]}"; do
|
|
port=$(echo $service | cut -d':' -f1)
|
|
name=$(echo $service | cut -d':' -f2)
|
|
|
|
log_info "检查服务: $name (端口:$port)"
|
|
if curl -f -s "http://$REMOTE_HOST:$port/actuator/health" > /dev/null 2>&1; then
|
|
log_success "✅ $name 服务健康"
|
|
success_count=$((success_count + 1))
|
|
else
|
|
log_warning "❌ $name 服务健康检查失败"
|
|
fi
|
|
done
|
|
|
|
log_info "健康检查结果: $success_count/$total_count 服务正常"
|
|
|
|
if [ $success_count -eq $total_count ]; then
|
|
log_success "所有关键服务健康检查通过"
|
|
else
|
|
log_warning "部分服务健康检查失败,请检查日志"
|
|
fi
|
|
}
|
|
|
|
# 显示部署结果
|
|
show_result() {
|
|
local end_time=$(date +%s)
|
|
local total_time=$((end_time - start_time))
|
|
|
|
echo ""
|
|
echo "========================================"
|
|
echo " 部署完成报告"
|
|
echo "========================================"
|
|
echo "项目名称: $PROJECT_NAME"
|
|
echo "部署环境: $DEPLOY_ENV"
|
|
echo "目标服务器: $REMOTE_HOST"
|
|
echo "部署时间: $(date '+%Y-%m-%d %H:%M:%S')"
|
|
echo "总耗时: ${total_time}s"
|
|
echo "========================================"
|
|
echo ""
|
|
echo "🌐 访问地址:"
|
|
echo " 前端应用: http://$REMOTE_HOST/emotion-museum"
|
|
echo " API网关: http://$REMOTE_HOST:19000"
|
|
echo " 用户服务: http://$REMOTE_HOST:19001"
|
|
echo " AI服务: http://$REMOTE_HOST:19002"
|
|
echo " 认证服务: http://$REMOTE_HOST:19008"
|
|
echo ""
|
|
echo "🔧 管理命令:"
|
|
echo " 查看容器: ssh $REMOTE_HOST 'docker ps'"
|
|
echo " 查看日志: ssh $REMOTE_HOST 'docker logs <service_name>'"
|
|
echo " 重启服务: ssh $REMOTE_HOST 'docker restart <service_name>'"
|
|
echo ""
|
|
echo "📋 健康检查:"
|
|
echo " curl http://$REMOTE_HOST:19000/actuator/health"
|
|
echo ""
|
|
echo "========================================"
|
|
echo "🎉 一键部署完成!"
|
|
}
|
|
|
|
# 主函数
|
|
main() {
|
|
local start_time=$(date +%s)
|
|
|
|
echo "🚀 开始情感博物馆一键部署..."
|
|
echo "目标服务器: $REMOTE_HOST"
|
|
echo "部署环境: $DEPLOY_ENV"
|
|
echo ""
|
|
|
|
# 检查环境
|
|
check_environment
|
|
|
|
# 构建前端
|
|
build_frontend
|
|
|
|
# 构建后端
|
|
build_backend
|
|
|
|
# 部署前端
|
|
deploy_frontend
|
|
|
|
# 部署后端
|
|
deploy_backend
|
|
|
|
# 健康检查
|
|
health_check
|
|
|
|
# 显示结果
|
|
show_result
|
|
}
|
|
|
|
# 处理命令行参数
|
|
case "${1:-}" in
|
|
"frontend")
|
|
log_info "仅部署前端"
|
|
check_environment
|
|
build_frontend
|
|
deploy_frontend
|
|
;;
|
|
"backend")
|
|
log_info "仅部署后端"
|
|
check_environment
|
|
build_backend
|
|
deploy_backend
|
|
;;
|
|
"check")
|
|
log_info "仅执行健康检查"
|
|
health_check
|
|
;;
|
|
"help"|"-h"|"--help")
|
|
echo "情感博物馆一键部署脚本"
|
|
echo ""
|
|
echo "用法:"
|
|
echo " ./one-click-deploy.sh # 完整部署前后端"
|
|
echo " ./one-click-deploy.sh frontend # 仅部署前端"
|
|
echo " ./one-click-deploy.sh backend # 仅部署后端"
|
|
echo " ./one-click-deploy.sh check # 仅健康检查"
|
|
echo " ./one-click-deploy.sh help # 显示帮助"
|
|
echo ""
|
|
echo "环境变量:"
|
|
echo " DEPLOY_ENV=test|prod # 部署环境(默认:test)"
|
|
echo ""
|
|
;;
|
|
*)
|
|
main
|
|
;;
|
|
esac
|