#!/bin/bash # Linux 云端部署脚本 # 使用方法: ./deploy-linux.sh set -e echo "🚀 开始部署 AIGC 平台到 Linux 服务器..." # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # 检查Java echo -e "${YELLOW}检查Java环境...${NC}" if ! command -v java &> /dev/null; then echo -e "${RED}❌ Java未安装,请先安装Java 21${NC}" echo "安装命令: sudo apt install -y openjdk-21-jdk" exit 1 fi JAVA_VERSION=$(java -version 2>&1 | head -n 1) echo -e "${GREEN}✅ Java已安装: $JAVA_VERSION${NC}" # 检查MySQL echo -e "${YELLOW}检查MySQL服务...${NC}" if ! systemctl is-active --quiet mysql && ! systemctl is-active --quiet mysqld; then echo -e "${RED}❌ MySQL服务未运行${NC}" echo "启动命令: sudo systemctl start mysql" exit 1 fi echo -e "${GREEN}✅ MySQL服务运行中${NC}" # 检查FFmpeg echo -e "${YELLOW}检查FFmpeg...${NC}" if ! command -v ffmpeg &> /dev/null; then echo -e "${YELLOW}⚠️ FFmpeg未安装,视频功能可能不可用${NC}" echo "安装命令: sudo apt install -y ffmpeg" else echo -e "${GREEN}✅ FFmpeg已安装${NC}" fi # 检查应用目录 APP_DIR="/app/aigc-platform" echo -e "${YELLOW}检查应用目录...${NC}" if [ ! -d "$APP_DIR" ]; then echo -e "${YELLOW}创建应用目录...${NC}" sudo mkdir -p $APP_DIR/{logs,uploads,temp,config,backend,frontend} sudo chown -R $USER:$USER $APP_DIR chmod -R 755 $APP_DIR fi echo -e "${GREEN}✅ 应用目录存在${NC}" # 检查JAR文件 JAR_FILE="$APP_DIR/backend/demo-0.0.1-SNAPSHOT.jar" if [ ! -f "$JAR_FILE" ]; then echo -e "${RED}❌ JAR文件不存在: $JAR_FILE${NC}" echo "请先上传JAR文件到服务器" exit 1 fi echo -e "${GREEN}✅ JAR文件存在${NC}" # 检查配置文件 CONFIG_FILE="$APP_DIR/config/application-prod.properties" if [ ! -f "$CONFIG_FILE" ]; then echo -e "${YELLOW}⚠️ 配置文件不存在,请先创建配置文件${NC}" echo "配置文件路径: $CONFIG_FILE" fi # 停止服务 echo -e "${YELLOW}停止现有服务...${NC}" if systemctl is-active --quiet aigc-platform; then sudo systemctl stop aigc-platform echo -e "${GREEN}✅ 服务已停止${NC}" else echo -e "${YELLOW}服务未运行${NC}" fi # 备份旧版本 echo -e "${YELLOW}备份旧版本...${NC}" BACKUP_DIR="$APP_DIR/backup/$(date +%Y%m%d_%H%M%S)" mkdir -p $BACKUP_DIR if [ -f "$JAR_FILE" ]; then cp "$JAR_FILE" "$BACKUP_DIR/" 2>/dev/null || true echo -e "${GREEN}✅ 备份完成: $BACKUP_DIR${NC}" fi # 检查systemd服务文件 SERVICE_FILE="/etc/systemd/system/aigc-platform.service" if [ ! -f "$SERVICE_FILE" ]; then echo -e "${YELLOW}⚠️ Systemd服务文件不存在${NC}" echo "请先创建服务文件: $SERVICE_FILE" echo "参考文档: LINUX_DEPLOYMENT_GUIDE.md" exit 1 fi # 重新加载systemd echo -e "${YELLOW}重新加载systemd配置...${NC}" sudo systemctl daemon-reload # 启动服务 echo -e "${YELLOW}启动服务...${NC}" sudo systemctl start aigc-platform # 等待启动 echo -e "${YELLOW}等待服务启动...${NC}" sleep 5 # 检查状态 if systemctl is-active --quiet aigc-platform; then echo -e "${GREEN}✅ 部署成功!${NC}" echo "" echo "服务状态:" sudo systemctl status aigc-platform --no-pager -l echo "" echo "查看日志: sudo journalctl -u aigc-platform -f" echo "停止服务: sudo systemctl stop aigc-platform" echo "重启服务: sudo systemctl restart aigc-platform" else echo -e "${RED}❌ 部署失败!${NC}" echo "" echo "查看错误日志:" sudo journalctl -u aigc-platform -n 50 --no-pager exit 1 fi # 测试健康检查 echo -e "${YELLOW}测试健康检查...${NC}" sleep 2 if curl -f http://localhost:8080/actuator/health > /dev/null 2>&1; then echo -e "${GREEN}✅ 健康检查通过${NC}" else echo -e "${YELLOW}⚠️ 健康检查失败,请检查日志${NC}" fi echo "" echo -e "${GREEN}🎉 部署完成!${NC}"