diff --git a/demo/LINUX_DEPLOYMENT_GUIDE.md b/demo/LINUX_DEPLOYMENT_GUIDE.md new file mode 100644 index 0000000..e7ced29 --- /dev/null +++ b/demo/LINUX_DEPLOYMENT_GUIDE.md @@ -0,0 +1,846 @@ +# 🐧 Linux 云端部署完整指南 + +本文档提供将项目打包并部署到Linux云服务器的完整步骤。 + +--- + +## 📦 一、本地打包(Windows/Mac) + +### 1.1 打包后端JAR文件 + +在项目根目录(`demo/`)执行: + +```bash +# Windows (PowerShell) +.\mvnw.cmd clean package -DskipTests + +# Linux/Mac +./mvnw clean package -DskipTests +``` + +打包成功后,JAR文件位置: +``` +demo/target/demo-0.0.1-SNAPSHOT.jar +``` + +### 1.2 打包前端 + +```bash +# 进入前端目录 +cd frontend + +# 安装依赖(首次需要) +npm install + +# 构建生产版本 +npm run build +``` + +构建成功后,前端文件位置: +``` +demo/frontend/dist/ +``` + +### 1.3 准备部署文件 + +创建部署包目录结构: + +```bash +# 在项目根目录创建部署包 +mkdir -p deploy-package +mkdir -p deploy-package/backend +mkdir -p deploy-package/frontend +mkdir -p deploy-package/scripts +mkdir -p deploy-package/config + +# 复制文件 +cp target/demo-0.0.1-SNAPSHOT.jar deploy-package/backend/ +cp -r frontend/dist/* deploy-package/frontend/ +cp deploy.sh deploy-package/scripts/ +``` + +--- + +## 🚀 二、服务器环境准备 + +### 2.1 连接服务器 + +```bash +# 使用SSH连接服务器 +ssh username@your-server-ip + +# 或使用密钥 +ssh -i ~/.ssh/your-key.pem username@your-server-ip +``` + +### 2.2 安装必需软件 + +#### Ubuntu/Debian + +```bash +# 更新系统 +sudo apt update && sudo apt upgrade -y + +# 安装Java 21 +sudo apt install -y openjdk-21-jdk + +# 验证Java安装 +java -version +# 应该显示: openjdk version "21.x.x" + +# 安装MySQL 8.0 +sudo apt install -y mysql-server + +# 启动MySQL服务 +sudo systemctl start mysql +sudo systemctl enable mysql + +# 安装FFmpeg(视频处理需要) +sudo apt install -y ffmpeg + +# 验证FFmpeg安装 +ffmpeg -version + +# 安装Nginx(反向代理) +sudo apt install -y nginx + +# 安装Maven(可选,用于重新构建) +sudo apt install -y maven +``` + +#### CentOS/RHEL + +```bash +# 更新系统 +sudo yum update -y + +# 安装Java 21 +sudo yum install -y java-21-openjdk java-21-openjdk-devel + +# 安装MySQL 8.0 +sudo yum install -y mysql-server + +# 启动MySQL服务 +sudo systemctl start mysqld +sudo systemctl enable mysqld + +# 安装FFmpeg +sudo yum install -y epel-release +sudo yum install -y ffmpeg + +# 安装Nginx +sudo yum install -y nginx +``` + +### 2.3 创建应用目录 + +```bash +# 创建应用目录结构 +sudo mkdir -p /app/aigc-platform +sudo mkdir -p /app/aigc-platform/{logs,uploads,temp,config,backend,frontend} + +# 设置权限 +sudo chown -R $USER:$USER /app/aigc-platform +chmod -R 755 /app/aigc-platform +``` + +--- + +## 🗄️ 三、数据库配置 + +### 3.1 配置MySQL + +```bash +# 安全配置MySQL(首次安装) +sudo mysql_secure_installation + +# 登录MySQL +sudo mysql -u root -p +``` + +### 3.2 创建数据库和用户 + +```sql +-- 创建数据库 +CREATE DATABASE aigc_platform CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + +-- 创建用户(替换'your_password'为强密码) +CREATE USER 'aigc_user'@'localhost' IDENTIFIED BY 'your_password'; + +-- 授予权限 +GRANT ALL PRIVILEGES ON aigc_platform.* TO 'aigc_user'@'localhost'; +FLUSH PRIVILEGES; + +-- 退出 +EXIT; +``` + +### 3.3 优化MySQL配置 + +编辑MySQL配置文件: + +```bash +# Ubuntu/Debian +sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf + +# CentOS/RHEL +sudo nano /etc/my.cnf +``` + +添加/修改以下配置: + +```ini +[mysqld] +# 字符集 +character-set-server=utf8mb4 +collation-server=utf8mb4_unicode_ci + +# 连接数(50人并发) +max_connections=100 +max_user_connections=50 + +# 缓冲池(根据内存调整,8GB服务器建议2-4GB) +innodb_buffer_pool_size=2G + +# 日志 +slow_query_log=1 +slow_query_log_file=/var/log/mysql/slow-query.log +long_query_time=2 + +# 时区 +default-time-zone='+08:00' +``` + +重启MySQL: + +```bash +sudo systemctl restart mysql +``` + +--- + +## 📤 四、上传文件到服务器 + +### 4.1 使用SCP上传(推荐) + +在**本地**执行: + +```bash +# 上传JAR文件 +scp target/demo-0.0.1-SNAPSHOT.jar username@your-server-ip:/app/aigc-platform/backend/ + +# 上传前端文件 +scp -r frontend/dist/* username@your-server-ip:/app/aigc-platform/frontend/ + +# 或使用rsync(更高效) +rsync -avz frontend/dist/ username@your-server-ip:/app/aigc-platform/frontend/ +``` + +### 4.2 使用FTP/SFTP工具 + +使用FileZilla、WinSCP等工具上传文件到: +- JAR文件 → `/app/aigc-platform/backend/` +- 前端文件 → `/app/aigc-platform/frontend/` + +### 4.3 使用Git(如果服务器有Git) + +```bash +# 在服务器上克隆仓库 +cd /app/aigc-platform +git clone ssh://git@your-git-server/path/to/repo.git + +# 构建 +cd repo/demo +./mvnw clean package -DskipTests +cp target/demo-0.0.1-SNAPSHOT.jar /app/aigc-platform/backend/ +``` + +--- + +## ⚙️ 五、应用配置 + +### 5.1 创建配置文件 + +在服务器上创建配置文件: + +```bash +# 创建生产环境配置 +sudo nano /app/aigc-platform/config/application-prod.properties +``` + +配置文件内容: + +```properties +# 数据库配置 +spring.datasource.url=jdbc:mysql://localhost:3306/aigc_platform?useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=Asia/Shanghai +spring.datasource.username=aigc_user +spring.datasource.password=your_password +spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver + +# 连接池配置(50人并发) +spring.datasource.hikari.maximum-pool-size=30 +spring.datasource.hikari.minimum-idle=10 +spring.datasource.hikari.connection-timeout=30000 +spring.datasource.hikari.idle-timeout=600000 +spring.datasource.hikari.max-lifetime=1800000 + +# JPA配置 +spring.jpa.hibernate.ddl-auto=update +spring.jpa.show-sql=false +spring.jpa.properties.hibernate.format_sql=true +spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect + +# 服务器配置 +server.port=8080 +server.tomcat.threads.max=150 +server.tomcat.threads.min-spare=20 +server.tomcat.max-connections=200 +server.tomcat.accept-count=100 + +# JWT配置 +jwt.secret=your-jwt-secret-key-change-this-to-random-string +jwt.expiration=86400000 + +# AI API配置(从环境变量读取) +ai.api.base-url=${AI_API_BASE_URL:https://api.openai.com} +ai.api.key=${AI_API_KEY:your-api-key} +ai.image.api.base-url=${AI_IMAGE_API_BASE_URL:https://api.openai.com} +ai.image.api.key=${AI_IMAGE_API_KEY:your-api-key} + +# 文件上传配置 +app.upload.path=${UPLOAD_PATH:/app/aigc-platform/uploads} +spring.servlet.multipart.max-file-size=100MB +spring.servlet.multipart.max-request-size=100MB + +# 日志配置 +logging.level.root=INFO +logging.level.com.example.demo=DEBUG +logging.file.path=/app/aigc-platform/logs +logging.file.name=${logging.file.path}/application.log +logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n + +# 时区 +spring.jackson.time-zone=Asia/Shanghai +``` + +### 5.2 创建环境变量文件(可选) + +```bash +sudo nano /app/aigc-platform/config/.env +``` + +```bash +# 数据库配置 +export DB_URL="jdbc:mysql://localhost:3306/aigc_platform?useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=Asia/Shanghai" +export DB_USERNAME="aigc_user" +export DB_PASSWORD="your_password" + +# JWT密钥(生成随机密钥) +export JWT_SECRET="$(openssl rand -base64 64)" + +# AI API密钥 +export AI_API_KEY="your-api-key" +export AI_IMAGE_API_KEY="your-api-key" + +# 文件路径 +export UPLOAD_PATH="/app/aigc-platform/uploads" +export TEMP_DIR="/app/aigc-platform/temp" +export FFMPEG_PATH="/usr/bin/ffmpeg" +``` + +--- + +## 🔧 六、创建Systemd服务 + +### 6.1 创建服务文件 + +```bash +sudo nano /etc/systemd/system/aigc-platform.service +``` + +服务文件内容: + +```ini +[Unit] +Description=AIGC Platform Application +After=network.target mysql.service +Requires=mysql.service + +[Service] +Type=simple +User=your-username +Group=your-group +WorkingDirectory=/app/aigc-platform/backend + +# 环境变量(可选,如果使用.env文件) +# EnvironmentFile=/app/aigc-platform/config/.env + +# JVM参数(根据服务器内存调整) +# 8GB内存服务器建议:-Xms1g -Xmx4g +# 16GB内存服务器建议:-Xms2g -Xmx8g +ExecStart=/usr/bin/java \ + -Xms1g \ + -Xmx4g \ + -XX:+UseG1GC \ + -XX:MaxGCPauseMillis=200 \ + -Dspring.profiles.active=prod \ + -Dspring.config.location=file:/app/aigc-platform/config/application-prod.properties \ + -jar /app/aigc-platform/backend/demo-0.0.1-SNAPSHOT.jar + +# 重启策略 +Restart=always +RestartSec=10 + +# 日志 +StandardOutput=journal +StandardError=journal +SyslogIdentifier=aigc-platform + +# 安全设置 +NoNewPrivileges=true +PrivateTmp=true + +[Install] +WantedBy=multi-user.target +``` + +**重要:** 将 `your-username` 和 `your-group` 替换为实际的用户名和组。 + +### 6.2 启动服务 + +```bash +# 重新加载systemd配置 +sudo systemctl daemon-reload + +# 启用服务(开机自启) +sudo systemctl enable aigc-platform + +# 启动服务 +sudo systemctl start aigc-platform + +# 查看服务状态 +sudo systemctl status aigc-platform + +# 查看日志 +sudo journalctl -u aigc-platform -f +``` + +### 6.3 常用服务管理命令 + +```bash +# 启动服务 +sudo systemctl start aigc-platform + +# 停止服务 +sudo systemctl stop aigc-platform + +# 重启服务 +sudo systemctl restart aigc-platform + +# 查看状态 +sudo systemctl status aigc-platform + +# 查看日志 +sudo journalctl -u aigc-platform -n 100 -f + +# 查看最近错误 +sudo journalctl -u aigc-platform -p err -n 50 +``` + +--- + +## 🌐 七、Nginx反向代理配置 + +### 7.1 创建Nginx配置 + +```bash +sudo nano /etc/nginx/sites-available/aigc-platform +``` + +配置内容: + +```nginx +# HTTP服务器(重定向到HTTPS) +server { + listen 80; + server_name your-domain.com www.your-domain.com; + + # 重定向到HTTPS + return 301 https://$server_name$request_uri; +} + +# HTTPS服务器 +server { + listen 443 ssl http2; + server_name your-domain.com www.your-domain.com; + + # SSL证书配置(使用Let's Encrypt) + ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem; + ssl_protocols TLSv1.2 TLSv1.3; + ssl_ciphers HIGH:!aNULL:!MD5; + ssl_prefer_server_ciphers on; + + # 日志 + access_log /var/log/nginx/aigc-platform-access.log; + error_log /var/log/nginx/aigc-platform-error.log; + + # 客户端最大上传大小 + client_max_body_size 100M; + + # API代理 + location /api/ { + proxy_pass http://localhost:8080; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + + # WebSocket支持(如果需要) + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + + # 超时设置 + proxy_connect_timeout 60s; + proxy_send_timeout 60s; + proxy_read_timeout 60s; + } + + # 上传文件代理 + location /uploads/ { + proxy_pass http://localhost:8080; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + + # 缓存设置 + expires 7d; + add_header Cache-Control "public, immutable"; + } + + # 前端静态文件 + location / { + root /app/aigc-platform/frontend; + index index.html; + try_files $uri $uri/ /index.html; + + # 缓存设置 + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ { + expires 1y; + add_header Cache-Control "public, immutable"; + } + } + + # 健康检查 + location /health { + proxy_pass http://localhost:8080/actuator/health; + access_log off; + } +} +``` + +### 7.2 启用配置 + +```bash +# 创建符号链接 +sudo ln -s /etc/nginx/sites-available/aigc-platform /etc/nginx/sites-enabled/ + +# 测试配置 +sudo nginx -t + +# 重新加载Nginx +sudo systemctl reload nginx +``` + +### 7.3 配置SSL证书(Let's Encrypt) + +```bash +# 安装Certbot +sudo apt install -y certbot python3-certbot-nginx + +# 获取证书(自动配置Nginx) +sudo certbot --nginx -d your-domain.com -d www.your-domain.com + +# 测试自动续期 +sudo certbot renew --dry-run +``` + +--- + +## ✅ 八、验证部署 + +### 8.1 检查服务状态 + +```bash +# 检查应用服务 +sudo systemctl status aigc-platform + +# 检查MySQL服务 +sudo systemctl status mysql + +# 检查Nginx服务 +sudo systemctl status nginx + +# 检查端口占用 +sudo netstat -tlnp | grep -E '8080|80|443' +``` + +### 8.2 测试API + +```bash +# 测试健康检查 +curl http://localhost:8080/actuator/health + +# 测试API(需要认证) +curl -X POST http://localhost:8080/api/auth/login \ + -H "Content-Type: application/json" \ + -d '{"username":"test","password":"test"}' +``` + +### 8.3 测试前端 + +在浏览器中访问: +- HTTP: `http://your-server-ip` +- HTTPS: `https://your-domain.com` + +### 8.4 检查日志 + +```bash +# 应用日志 +tail -f /app/aigc-platform/logs/application.log + +# 系统日志 +sudo journalctl -u aigc-platform -f + +# Nginx日志 +sudo tail -f /var/log/nginx/aigc-platform-access.log +sudo tail -f /var/log/nginx/aigc-platform-error.log +``` + +--- + +## 🔄 九、更新部署 + +### 9.1 更新后端 + +```bash +# 1. 停止服务 +sudo systemctl stop aigc-platform + +# 2. 备份旧版本 +cp /app/aigc-platform/backend/demo-0.0.1-SNAPSHOT.jar \ + /app/aigc-platform/backend/demo-0.0.1-SNAPSHOT.jar.backup + +# 3. 上传新版本(从本地) +# scp target/demo-0.0.1-SNAPSHOT.jar username@server:/app/aigc-platform/backend/ + +# 4. 启动服务 +sudo systemctl start aigc-platform + +# 5. 检查状态 +sudo systemctl status aigc-platform +``` + +### 9.2 更新前端 + +```bash +# 1. 备份旧版本 +cp -r /app/aigc-platform/frontend /app/aigc-platform/frontend.backup + +# 2. 上传新版本(从本地) +# scp -r frontend/dist/* username@server:/app/aigc-platform/frontend/ + +# 3. 重新加载Nginx +sudo systemctl reload nginx +``` + +--- + +## 🛠️ 十、故障排查 + +### 10.1 应用无法启动 + +```bash +# 查看详细日志 +sudo journalctl -u aigc-platform -n 100 + +# 检查Java版本 +java -version + +# 检查端口占用 +sudo lsof -i :8080 + +# 检查文件权限 +ls -la /app/aigc-platform/backend/ +``` + +### 10.2 数据库连接失败 + +```bash +# 测试MySQL连接 +mysql -u aigc_user -p aigc_platform + +# 检查MySQL服务 +sudo systemctl status mysql + +# 查看MySQL日志 +sudo tail -f /var/log/mysql/error.log +``` + +### 10.3 Nginx配置错误 + +```bash +# 测试配置 +sudo nginx -t + +# 查看错误日志 +sudo tail -f /var/log/nginx/error.log +``` + +### 10.4 内存不足 + +```bash +# 查看内存使用 +free -h + +# 查看Java进程内存 +ps aux | grep java + +# 调整JVM参数(在systemd服务文件中) +# -Xms1g -Xmx4g # 减少内存使用 +``` + +--- + +## 📊 十一、性能监控 + +### 11.1 系统监控 + +```bash +# CPU和内存使用 +top +htop # 如果安装了 + +# 磁盘使用 +df -h + +# 网络连接 +netstat -an | grep ESTABLISHED | wc -l +``` + +### 11.2 应用监控 + +```bash +# 查看JVM内存使用 +jstat -gc 1000 + +# 查看线程 +jstack + +# 查看应用日志 +tail -f /app/aigc-platform/logs/application.log | grep ERROR +``` + +--- + +## 🔒 十二、安全建议 + +1. **防火墙配置** + ```bash + # 只开放必要端口 + sudo ufw allow 22/tcp # SSH + sudo ufw allow 80/tcp # HTTP + sudo ufw allow 443/tcp # HTTPS + sudo ufw enable + ``` + +2. **定期备份** + ```bash + # 备份数据库 + mysqldump -u aigc_user -p aigc_platform > backup_$(date +%Y%m%d).sql + + # 备份上传文件 + tar -czf uploads_backup_$(date +%Y%m%d).tar.gz /app/aigc-platform/uploads + ``` + +3. **更新系统** + ```bash + sudo apt update && sudo apt upgrade -y + ``` + +--- + +## 📝 快速部署脚本 + +创建一键部署脚本 `deploy-linux.sh`: + +```bash +#!/bin/bash +set -e + +echo "🚀 开始部署 AIGC 平台..." + +# 检查Java +if ! command -v java &> /dev/null; then + echo "❌ Java未安装,请先安装Java 21" + exit 1 +fi + +# 检查MySQL +if ! systemctl is-active --quiet mysql; then + echo "❌ MySQL服务未运行" + exit 1 +fi + +# 停止服务 +echo "🛑 停止服务..." +sudo systemctl stop aigc-platform || true + +# 备份 +echo "💾 备份旧版本..." +BACKUP_DIR="/app/aigc-platform/backup/$(date +%Y%m%d_%H%M%S)" +mkdir -p $BACKUP_DIR +cp /app/aigc-platform/backend/demo-0.0.1-SNAPSHOT.jar $BACKUP_DIR/ || true + +# 启动服务 +echo "▶️ 启动服务..." +sudo systemctl start aigc-platform + +# 等待启动 +sleep 5 + +# 检查状态 +if systemctl is-active --quiet aigc-platform; then + echo "✅ 部署成功!" + sudo systemctl status aigc-platform +else + echo "❌ 部署失败,查看日志:" + sudo journalctl -u aigc-platform -n 50 + exit 1 +fi +``` + +使用: +```bash +chmod +x deploy-linux.sh +./deploy-linux.sh +``` + +--- + +## 📞 支持 + +如遇问题,请检查: +1. 日志文件:`/app/aigc-platform/logs/application.log` +2. 系统日志:`sudo journalctl -u aigc-platform` +3. Nginx日志:`/var/log/nginx/aigc-platform-error.log` + +--- + +**部署完成后,访问:** +- 前端:`https://your-domain.com` +- API:`https://your-domain.com/api` +- 健康检查:`https://your-domain.com/health` + diff --git a/demo/deploy-linux.sh b/demo/deploy-linux.sh new file mode 100644 index 0000000..b8823f7 --- /dev/null +++ b/demo/deploy-linux.sh @@ -0,0 +1,139 @@ +#!/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}" +