项目重构: 整理目录结构, 更新前后端代码, 添加测试和数据库迁移

This commit is contained in:
AIGC Developer
2025-12-30 10:24:19 +08:00
parent 5344148a1c
commit 38630dbb66
117 changed files with 1987 additions and 1316 deletions

View File

@@ -0,0 +1,76 @@
# Linux服务器部署命令已修改为使用正确的镜像
cd /home/ubuntu/spring-vue-app/backend
# 创建/更新 Dockerfile使用正确的镜像
cat > Dockerfile << 'EOF'
# 多阶段构建:构建阶段
FROM maven:3.9-eclipse-temurin-21 AS builder
WORKDIR /app
# 复制 pom.xml 并下载依赖利用Docker缓存
COPY pom.xml .
RUN mvn dependency:go-offline -B || true
# 复制源码
COPY src ./src
# 打包应用(跳过测试)
RUN mvn clean package -DskipTests -B
# 生产阶段
FROM eclipse-temurin:21-jre
WORKDIR /app
# 安装时区支持和wget健康检查
RUN apt-get update && \
apt-get install -y --no-install-recommends \
tzdata \
wget \
curl && \
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
echo "Asia/Shanghai" > /etc/timezone && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# 创建非root用户安全考虑
RUN groupadd -r spring && useradd -r -g spring spring
# 创建必要的目录并设置权限
RUN mkdir -p /app/uploads /app/temp /app/logs && \
chown -R spring:spring /app
# 从构建阶段复制JAR文件项目生成的JAR文件名demo-0.0.1-SNAPSHOT.jar
COPY --from=builder --chown=spring:spring /app/target/demo-0.0.1-SNAPSHOT.jar app.jar
# 切换到非root用户
USER spring
EXPOSE 8080
# JVM 参数优化适配50人并发建议2-4GB内存
ENV JAVA_OPTS="-Xmx2g -Xms1g -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -Djava.security.egd=file:/dev/./urandom"
# 健康检查检查应用是否响应不依赖Actuator
HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \
CMD wget --no-verbose --tries=1 --spider http://localhost:8080/ || exit 1
ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar app.jar"]
EOF
# 返回项目根目录
cd /home/ubuntu/spring-vue-app
# 构建并启动服务
sudo docker-compose build --no-cache
sudo docker-compose up -d
# 等待服务启动
sleep 30
# 检查服务状态
sudo docker-compose ps
# 健康检查不依赖Actuator直接检查根路径
curl -f http://localhost:8080/ || echo "后端服务可能还在启动中,请稍后检查"
curl -f http://localhost/ || echo "前端服务可能还在启动中,请稍后检查"

View File

@@ -0,0 +1,44 @@
@echo off
chcp 65001 >nul
echo ========================================
echo 后端打包脚本 - Windows
echo ========================================
echo.
echo [1/3] 清理旧的构建文件...
if exist target rmdir /s /q target
if exist backend-dist.zip del backend-dist.zip
echo.
echo [2/3] 使用Maven打包...
echo 这可能需要几分钟时间,请耐心等待...
call mvnw.cmd clean package -DskipTests
if %errorlevel% neq 0 (
echo 错误: Maven打包失败
pause
exit /b 1
)
echo.
echo ========================================
echo 打包完成!
echo ========================================
echo.
echo JAR包位置: target\demo-0.0.1-SNAPSHOT.jar
echo 文件大小:
dir target\demo-0.0.1-SNAPSHOT.jar | find "demo-0.0.1-SNAPSHOT.jar"
echo.
echo 部署到宝塔步骤:
echo 1. 上传 target\demo-0.0.1-SNAPSHOT.jar 到服务器(如:/www/server/aigc-backend/app.jar
echo 2. 在服务器创建 application-prod.properties 配置文件
echo 3. 在宝塔面板使用 Supervisor 或 Java项目管理器启动
echo.
echo 启动命令:
echo java -jar app.jar --spring.profiles.active=prod
echo.
echo 注意事项:
echo - 确保服务器已安装 Java 21 或更高版本
echo - 确保MySQL数据库已创建并配置
echo - 需要在服务器上创建 application-prod.properties 配置文件
echo.
pause

View File

@@ -0,0 +1,53 @@
#!/bin/bash
# 后端打包脚本 - Linux
echo "========================================"
echo " 后端打包脚本 - Linux"
echo "========================================"
echo ""
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
echo "[1/3] 清理旧的构建文件..."
rm -rf target
rm -f backend-dist.tar.gz
rm -rf backend-dist
echo ""
echo "[2/3] 使用Maven打包..."
echo "这可能需要几分钟时间,请耐心等待..."
./mvnw clean package -DskipTests
if [ $? -ne 0 ]; then
echo -e "${RED}错误: Maven打包失败${NC}"
exit 1
fi
echo ""
echo "========================================"
echo " 打包完成!"
echo "========================================"
echo ""
echo -e "${GREEN}JAR包位置: target/demo-0.0.1-SNAPSHOT.jar${NC}"
echo "文件大小:"
ls -lh target/demo-0.0.1-SNAPSHOT.jar | awk '{print $5}'
echo ""
echo "部署到宝塔步骤:"
echo "1. 上传 target/demo-0.0.1-SNAPSHOT.jar 到服务器(如:/www/server/aigc-backend/app.jar"
echo "2. 在服务器创建 application-prod.properties 配置文件"
echo "3. 在宝塔面板使用 Supervisor 或 Java项目管理器启动"
echo ""
echo "启动命令:"
echo " java -jar app.jar --spring.profiles.active=prod"
echo ""
echo "上传命令示例:"
echo " scp target/demo-0.0.1-SNAPSHOT.jar root@your-server:/www/server/aigc-backend/app.jar"
echo ""
echo "注意事项:"
echo "- 确保服务器已安装 Java 21 或更高版本"
echo "- 确保MySQL数据库已创建并配置"
echo "- 需要在服务器上创建 application-prod.properties 配置文件"
echo ""

View File

@@ -0,0 +1,141 @@
#!/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}"

View File

@@ -0,0 +1,74 @@
#!/bin/bash
# ============================================
# AIGC项目部署脚本沙箱测试环境
# ============================================
echo "🚀 开始部署 AIGC 项目到生产服务器..."
# 配置变量
SERVER="root@vionow.com"
REMOTE_DIR="/opt/aigc"
JAR_FILE="target/demo-0.0.1-SNAPSHOT.jar"
FRONTEND_DIR="frontend/dist"
# 检查JAR文件是否存在
if [ ! -f "$JAR_FILE" ]; then
echo "❌ JAR文件不存在请先运行 mvnw clean package"
exit 1
fi
# 检查前端文件是否存在
if [ ! -d "$FRONTEND_DIR" ]; then
echo "❌ 前端dist目录不存在请先运行 npm run build"
exit 1
fi
# 1. 上传后端JAR文件
echo "📦 上传后端JAR文件..."
scp "$JAR_FILE" "$SERVER:$REMOTE_DIR/"
# 2. 上传前端文件
echo "📦 上传前端文件..."
scp -r "$FRONTEND_DIR"/* "$SERVER:/var/www/html/"
# 3. 在服务器上重启服务
echo "🔄 重启服务..."
ssh "$SERVER" << 'ENDSSH'
# 停止旧服务
echo "⏹️ 停止旧服务..."
pkill -f demo-0.0.1-SNAPSHOT.jar
sleep 3
# 启动新服务
echo "▶️ 启动新服务..."
cd /opt/aigc
nohup java -jar demo-0.0.1-SNAPSHOT.jar \
--spring.profiles.active=prod \
--spring.config.additional-location=file:./application-prod.properties \
> app.log 2>&1 &
# 等待启动
sleep 5
# 检查服务状态
if pgrep -f demo-0.0.1-SNAPSHOT.jar > /dev/null; then
echo "✅ 服务启动成功!"
echo "📋 最新日志:"
tail -n 20 app.log
else
echo "❌ 服务启动失败,请检查日志:"
tail -n 50 app.log
exit 1
fi
ENDSSH
echo ""
echo "✅ 部署完成!"
echo "🌐 访问地址:"
echo " 前端https://vionow.com"
echo " 后端https://vionow.com/api/"
echo " Swaggerhttps://vionow.com/swagger-ui.html"
echo ""
echo "📋 查看实时日志:"
echo " ssh $SERVER 'tail -f /opt/aigc/app.log'"

View File

@@ -0,0 +1,168 @@
# deploy.ps1 - Spring Boot + Vue 项目 Docker 部署脚本
Write-Host "🚀 AIGC 平台 Docker 部署脚本" -ForegroundColor Green
Write-Host ("=" * 60)
# 检查必要文件
$requiredFiles = @("docker-compose.yml", "backend/Dockerfile", "frontend/Dockerfile", "frontend/nginx.conf")
foreach ($file in $requiredFiles) {
if (-not (Test-Path $file)) {
Write-Host "❌ 缺少必要文件: $file" -ForegroundColor Red
exit 1
}
}
Write-Host "✅ 所有必要文件检查通过" -ForegroundColor Green
# 检查 Docker 环境
try {
$dockerVersion = docker --version 2>&1
$composeVersion = docker-compose --version 2>&1
Write-Host "✅ Docker 环境: $dockerVersion" -ForegroundColor Green
Write-Host "✅ Docker Compose: $composeVersion" -ForegroundColor Green
} catch {
Write-Host "❌ Docker 未正确安装或启动" -ForegroundColor Red
Write-Host " 请确保已安装 Docker Desktop 并已启动" -ForegroundColor Yellow
exit 1
}
# 检查前端是否已构建
if (-not (Test-Path "frontend/dist")) {
Write-Host "`n⚠️ 前端未构建,开始构建前端..." -ForegroundColor Yellow
Push-Location frontend
try {
if (Test-Path "package.json") {
Write-Host " 安装依赖..." -ForegroundColor Cyan
npm install
Write-Host " 构建生产版本..." -ForegroundColor Cyan
npm run build
Write-Host "✅ 前端构建完成" -ForegroundColor Green
} else {
Write-Host "⚠️ 未找到 package.json跳过前端构建" -ForegroundColor Yellow
}
} catch {
Write-Host "❌ 前端构建失败: $($_.Exception.Message)" -ForegroundColor Red
Write-Host " 可以稍后手动构建: cd frontend && npm install && npm run build" -ForegroundColor Yellow
} finally {
Pop-Location
}
} else {
Write-Host "✅ 前端已构建" -ForegroundColor Green
}
# 停止现有服务
Write-Host "`n🛑 停止现有服务..." -ForegroundColor Yellow
docker-compose down 2>&1 | Out-Null
# 构建镜像
Write-Host "`n📦 构建 Docker 镜像..." -ForegroundColor Cyan
Write-Host " 这可能需要几分钟时间,请耐心等待..." -ForegroundColor Gray
$buildResult = docker-compose build --no-cache 2>&1
if ($LASTEXITCODE -ne 0) {
Write-Host "❌ 镜像构建失败" -ForegroundColor Red
Write-Host $buildResult -ForegroundColor Red
exit 1
}
Write-Host "✅ 镜像构建完成" -ForegroundColor Green
# 启动服务
Write-Host "`n🐳 启动所有服务..." -ForegroundColor Cyan
docker-compose up -d
if ($LASTEXITCODE -ne 0) {
Write-Host "❌ 服务启动失败" -ForegroundColor Red
exit 1
}
# 等待服务启动
Write-Host "`n⏳ 等待服务启动60秒..." -ForegroundColor Yellow
Write-Host " 后端服务需要时间连接数据库并初始化..." -ForegroundColor Gray
Start-Sleep -Seconds 60
# 检查服务状态
Write-Host "`n🔍 检查服务状态..." -ForegroundColor Cyan
docker-compose ps
# 健康检查
Write-Host "`n🏥 服务健康检查..." -ForegroundColor Cyan
# 检查 MySQL 服务
Write-Host " 检查 MySQL..." -ForegroundColor Gray
$mysqlStatus = docker-compose ps mysql 2>&1 | Select-String "Up"
if ($mysqlStatus) {
Write-Host " ✅ MySQL 服务运行中" -ForegroundColor Green
} else {
Write-Host " ⚠️ MySQL 服务可能未正常启动" -ForegroundColor Yellow
}
# 检查 Redis 服务
Write-Host " 检查 Redis..." -ForegroundColor Gray
$redisStatus = docker-compose ps redis 2>&1 | Select-String "Up"
if ($redisStatus) {
Write-Host " ✅ Redis 服务运行中" -ForegroundColor Green
} else {
Write-Host " ⚠️ Redis 服务可能未正常启动" -ForegroundColor Yellow
}
# 检查后端服务
Write-Host " 检查后端服务..." -ForegroundColor Gray
try {
# 检查后端服务是否响应
$backendTest = Invoke-WebRequest -Uri "http://localhost:8080" -TimeoutSec 5 -ErrorAction SilentlyContinue
if ($backendTest.StatusCode -eq 200 -or $backendTest.StatusCode -eq 404 -or $backendTest.StatusCode -eq 302) {
Write-Host " ✅ 后端服务可访问 (状态码: $($backendTest.StatusCode))" -ForegroundColor Green
}
} catch {
# 尝试检查API端点
try {
$apiTest = Invoke-WebRequest -Uri "http://localhost:8080/api" -TimeoutSec 5 -ErrorAction SilentlyContinue
Write-Host " ✅ 后端API可访问" -ForegroundColor Green
} catch {
Write-Host " ⚠️ 后端服务可能还在启动中,请稍后检查" -ForegroundColor Yellow
Write-Host " 查看日志: docker-compose logs backend" -ForegroundColor Gray
Write-Host " 提示: 首次启动可能需要1-2分钟" -ForegroundColor Gray
}
}
# 检查前端服务
Write-Host " 检查前端服务..." -ForegroundColor Gray
try {
$frontendResponse = Invoke-WebRequest -Uri "http://localhost" -TimeoutSec 5 -ErrorAction SilentlyContinue
if ($frontendResponse.StatusCode -eq 200) {
Write-Host " ✅ 前端服务运行正常" -ForegroundColor Green
}
} catch {
Write-Host " ⚠️ 前端服务检查失败: $($_.Exception.Message)" -ForegroundColor Yellow
Write-Host " 查看日志: docker-compose logs frontend" -ForegroundColor Gray
}
# 显示访问信息
Write-Host "`n" + ("=" * 60) -ForegroundColor Green
Write-Host "🎉 部署完成!" -ForegroundColor Green
Write-Host ""
Write-Host "📍 访问地址:" -ForegroundColor Cyan
Write-Host " 前端: http://localhost" -ForegroundColor White
Write-Host " 后端API: http://localhost:8080" -ForegroundColor White
Write-Host " API文档: http://localhost:8080/api" -ForegroundColor White
Write-Host ""
Write-Host "📍 数据库连接信息:" -ForegroundColor Cyan
Write-Host " 地址: localhost:3306" -ForegroundColor White
Write-Host " 用户: aigc_user" -ForegroundColor White
Write-Host " 密码: aigc_password" -ForegroundColor White
Write-Host " 数据库: aigc_platform" -ForegroundColor White
Write-Host ""
Write-Host "📍 Redis:" -ForegroundColor Cyan
Write-Host " 地址: localhost:6379" -ForegroundColor White
Write-Host ""
Write-Host "📋 常用命令:" -ForegroundColor Yellow
Write-Host " 查看所有服务日志: docker-compose logs -f" -ForegroundColor Gray
Write-Host " 查看后端日志: docker-compose logs -f backend" -ForegroundColor Gray
Write-Host " 查看前端日志: docker-compose logs -f frontend" -ForegroundColor Gray
Write-Host " 查看服务状态: docker-compose ps" -ForegroundColor Gray
Write-Host " 停止服务: docker-compose down" -ForegroundColor Gray
Write-Host " 停止并删除数据: docker-compose down -v" -ForegroundColor Gray
Write-Host " 重新部署: .\deploy.ps1" -ForegroundColor Gray
Write-Host ""
Write-Host "⚠️ 注意事项:" -ForegroundColor Yellow
Write-Host " 1. 首次启动可能需要更长时间,请耐心等待" -ForegroundColor Gray
Write-Host " 2. 如果服务未正常启动,请查看日志排查问题" -ForegroundColor Gray
Write-Host " 3. 确保端口 80、8080、3306、6379 未被占用" -ForegroundColor Gray
Write-Host ("=" * 60) -ForegroundColor Green

View File

@@ -0,0 +1,71 @@
#!/bin/bash
# Nginx 反向代理部署脚本
echo "🚀 开始部署 AIGC 平台..."
# 检查 Docker
if ! command -v docker &> /dev/null; then
echo "❌ Docker 未安装,请先安装 Docker"
exit 1
fi
if ! command -v docker-compose &> /dev/null; then
echo "❌ Docker Compose 未安装,请先安装 Docker Compose"
exit 1
fi
# 构建前端
echo "📦 构建前端..."
cd frontend
if ! npm install; then
echo "❌ 前端依赖安装失败"
exit 1
fi
if ! npm run build; then
echo "❌ 前端构建失败"
exit 1
fi
cd ..
# 检查前端构建产物
if [ ! -d "frontend/dist" ]; then
echo "❌ 前端构建产物不存在,请检查构建过程"
exit 1
fi
echo "✅ 前端构建完成"
# 停止现有容器
echo "🛑 停止现有容器..."
docker-compose down
# 构建并启动服务
echo "🔨 构建并启动服务..."
docker-compose up -d --build
# 等待服务启动
echo "⏳ 等待服务启动..."
sleep 10
# 检查服务状态
echo "📊 检查服务状态..."
docker-compose ps
# 测试健康检查
echo "🏥 测试健康检查..."
if curl -f http://localhost/health > /dev/null 2>&1; then
echo "✅ Nginx 健康检查通过"
else
echo "⚠️ Nginx 健康检查失败"
fi
echo ""
echo "✅ 部署完成!"
echo "🌐 前端地址: http://localhost"
echo "🔗 API 地址: http://localhost/api"
echo ""
echo "查看日志: docker-compose logs -f"
echo "停止服务: docker-compose down"

View File

@@ -0,0 +1,51 @@
# 检查队列状态的PowerShell脚本
Write-Host "=== 检查应用状态 ===" -ForegroundColor Green
$port8080 = netstat -ano | findstr :8080
if ($port8080) {
Write-Host "✅ 应用正在运行 (端口8080)" -ForegroundColor Green
} else {
Write-Host "❌ 应用未运行 (端口8080)" -ForegroundColor Red
}
Write-Host "`n=== 检查Java进程 ===" -ForegroundColor Green
$javaProcesses = Get-Process | Where-Object {$_.ProcessName -like "*java*"}
if ($javaProcesses) {
Write-Host "✅ 找到Java进程:" -ForegroundColor Green
$javaProcesses | Select-Object Id, ProcessName, CPU | Format-Table
} else {
Write-Host "❌ 没有找到Java进程" -ForegroundColor Red
}
Write-Host "`n=== 尝试启动应用 ===" -ForegroundColor Yellow
try {
Write-Host "启动Spring Boot应用..." -ForegroundColor Yellow
Start-Process -FilePath "java" -ArgumentList "-jar", "target/demo-0.0.1-SNAPSHOT.jar", "--spring.profiles.active=dev" -WindowStyle Hidden
Write-Host "✅ 应用启动命令已执行" -ForegroundColor Green
Write-Host "等待应用启动..." -ForegroundColor Yellow
Start-Sleep -Seconds 30
Write-Host "`n=== 检查应用是否启动成功 ===" -ForegroundColor Green
$port8080After = netstat -ano | findstr :8080
if ($port8080After) {
Write-Host "✅ 应用启动成功" -ForegroundColor Green
Write-Host "`n=== 测试诊断接口 ===" -ForegroundColor Green
try {
$response = Invoke-WebRequest -Uri "http://localhost:8080/api/diagnostic/queue-status" -Method GET -TimeoutSec 10
Write-Host "✅ 诊断接口响应成功" -ForegroundColor Green
Write-Host "响应内容:" -ForegroundColor Yellow
$response.Content | ConvertFrom-Json | ConvertTo-Json -Depth 3
} catch {
Write-Host "❌ 诊断接口调用失败: $($_.Exception.Message)" -ForegroundColor Red
}
} else {
Write-Host "❌ 应用启动失败" -ForegroundColor Red
}
} catch {
Write-Host "❌ 启动应用失败: $($_.Exception.Message)" -ForegroundColor Red
}
Write-Host "`n=== 检查完成 ===" -ForegroundColor Green

View File

@@ -0,0 +1,21 @@
# 清除过期JWT Token脚本
echo "=== 清除过期JWT Token ==="
echo "问题JWT token已过期导致登录后立即被重定向"
echo "解决清除localStorage中的过期token重新登录"
echo -e "\n🔧 解决方案:"
echo "1. 打开浏览器开发者工具 (F12)"
echo "2. 进入 Console 标签页"
echo "3. 执行以下命令清除过期token"
echo ""
echo "localStorage.removeItem('token')"
echo "localStorage.removeItem('user')"
echo "location.reload()"
echo ""
echo "4. 然后重新登录:"
echo " - 用户名: admin"
echo " - 密码: admin123"
echo ""
echo "✅ JWT过期时间已从24小时增加到7天"
echo "✅ 清除过期token后重新登录即可正常工作"

View File

@@ -0,0 +1,24 @@
# 清除旧localStorage数据脚本
echo "=== 清除旧localStorage数据 ==="
echo "已修改token存储方式从localStorage改为sessionStorage"
echo "现在关闭页面时token会自动清除"
echo -e "\n🔧 清除步骤:"
echo "1. 打开浏览器开发者工具 (F12)"
echo "2. 进入 Console 标签页"
echo "3. 执行以下命令清除旧的localStorage数据"
echo ""
echo "localStorage.removeItem('token')"
echo "localStorage.removeItem('user')"
echo "console.log('已清除localStorage中的旧数据')"
echo ""
echo "4. 然后重新登录:"
echo " - 用户名: admin"
echo " - 密码: admin123"
echo ""
echo "✅ 修改内容:"
echo "- token和用户信息现在存储在sessionStorage中"
echo "- 关闭页面时自动清除,提高安全性"
echo "- 刷新页面时保持登录状态"
echo "- 401错误时自动清除sessionStorage"

View File

@@ -0,0 +1,73 @@
@echo off
chcp 65001 >nul
echo ========================================
echo PayPal配置一键设置脚本
echo ========================================
echo.
set CONFIG_FILE=src\main\resources\application-dev.properties
set SOURCE_FILE=application.properties.paypal-config
echo [1/3] 检查配置文件...
if exist "%SOURCE_FILE%" (
echo ✓ 找到PayPal配置文件
) else (
echo ✗ 配置文件不存在: %SOURCE_FILE%
echo 请确保 application.properties.paypal-config 文件存在
pause
exit /b 1
)
echo.
echo [2/3] 创建application-dev.properties...
if not exist "src\main\resources" (
mkdir src\main\resources
)
if exist "%CONFIG_FILE%" (
echo ! application-dev.properties 已存在
set /p OVERWRITE="是否追加PayPal配置(Y/N): "
if /i "%OVERWRITE%"=="Y" (
echo. >> "%CONFIG_FILE%"
type "%SOURCE_FILE%" >> "%CONFIG_FILE%"
echo ✓ PayPal配置已追加
) else (
echo - 跳过配置
)
) else (
type "%SOURCE_FILE%" > "%CONFIG_FILE%"
echo ✓ application-dev.properties 创建成功
)
echo.
echo [3/3] 验证配置...
if exist "%CONFIG_FILE%" (
echo ✓ 配置文件存在: %CONFIG_FILE%
findstr /c:"paypal.client-id" "%CONFIG_FILE%" >nul
if %errorlevel%==0 (
echo ✓ PayPal配置已添加
) else (
echo ✗ PayPal配置未找到
)
) else (
echo ✗ 配置文件创建失败
pause
exit /b 1
)
echo.
echo ========================================
echo ✓ PayPal配置完成
echo ========================================
echo.
echo 下一步:
echo 1. 启动应用: mvn spring-boot:run
echo 2. 查看日志确认PayPal初始化成功
echo 3. 访问 http://localhost:8080/swagger-ui.html 查看API文档
echo.
echo 安全提醒:
echo - application-dev.properties 已在 .gitignore 中
echo - 不会被提交到版本控制系统
echo - 请妥善保管你的PayPal凭证
echo.
pause

View File

@@ -0,0 +1,36 @@
@echo off
chcp 65001 >nul
echo ====================================
echo 启动 FRP 客户端
echo ====================================
echo.
REM 检查 frpc.ini 是否存在
if not exist "frpc.ini" (
echo [错误] frpc.ini 配置文件不存在!
echo 请先创建 frpc.ini 配置文件
echo 可以参考 frpc.ini.example 文件
pause
exit /b 1
)
REM 检查 frpc.exe 是否存在
if not exist "frpc.exe" (
echo [错误] frpc.exe 不存在!
echo 请先下载 FRP 客户端:
echo https://github.com/fatedier/frp/releases
echo 解压后,将 frpc.exe 放在当前目录
pause
exit /b 1
)
echo 正在启动 FRP 客户端...
echo 配置文件: frpc.ini
echo.
REM 启动 FRP 客户端
frpc.exe -c frpc.ini
pause

View File

@@ -0,0 +1,33 @@
@echo off
chcp 65001 >nul
echo ========================================
echo AIGC 项目本地启动脚本
echo ========================================
echo.
echo [1/2] 启动后端服务...
start "后端服务" cmd /k ".\mvnw.cmd spring-boot:run"
timeout /t 3 /nobreak >nul
echo [2/2] 启动前端服务...
cd frontend
start "前端服务" cmd /k "npm run dev"
cd ..
echo.
echo ========================================
echo 启动完成!
echo ========================================
echo.
echo 访问地址:
echo 前端: http://localhost:5173
echo 后端: http://localhost:8080
echo Swagger: http://localhost:8080/swagger-ui.html
echo.
echo 提示:
echo - 后端首次启动需要 30-60 秒
echo - 请等待服务完全启动后再访问
echo - 关闭窗口即可停止服务
echo.
pause

View File

@@ -0,0 +1,33 @@
# 启动Spring Boot应用修复DNS解析问题
# 添加JVM参数禁用DNS负缓存
Write-Host "=== 启动Spring Boot应用带DNS修复 ===" -ForegroundColor Green
$jvmArgs = @(
"-Dsun.net.inetaddr.ttl=60", # DNS成功缓存60秒
"-Dsun.net.inetaddr.negative.ttl=10", # DNS失败缓存10秒默认10分钟
"-Dnetworkaddress.cache.ttl=60", # 另一种DNS缓存设置
"-Dnetworkaddress.cache.negative.ttl=10", # 另一种DNS负缓存设置
"-jar",
"target/demo-0.0.1-SNAPSHOT.jar",
"--spring.profiles.active=dev"
)
Write-Host "启动参数: java $($jvmArgs -join ' ')" -ForegroundColor Yellow
try {
Start-Process -FilePath "java" -ArgumentList $jvmArgs -NoNewWindow -Wait:$false
Write-Host "✅ 应用启动命令已执行" -ForegroundColor Green
Write-Host "等待应用启动..." -ForegroundColor Yellow
Start-Sleep -Seconds 5
# 检查是否启动成功
$port8080 = netstat -ano | findstr :8080
if ($port8080) {
Write-Host "✅ 应用已启动 (端口8080)" -ForegroundColor Green
} else {
Write-Host "⚠ 应用可能还在启动中,请稍后检查日志" -ForegroundColor Yellow
}
} catch {
Write-Host "❌ 启动失败: $($_.Exception.Message)" -ForegroundColor Red
}

View File

@@ -0,0 +1,84 @@
# PayPal支付测试脚本
# 使用方法: .\test-paypal-payment.ps1
Write-Host "========================================" -ForegroundColor Cyan
Write-Host "PayPal支付功能测试" -ForegroundColor Cyan
Write-Host "========================================" -ForegroundColor Cyan
Write-Host ""
# 检查应用是否运行
Write-Host "[1/4] 检查应用状态..." -ForegroundColor Yellow
try {
$response = Invoke-WebRequest -Uri "http://localhost:8080/actuator/health" -TimeoutSec 3 -ErrorAction SilentlyContinue
Write-Host "✓ 应用正在运行" -ForegroundColor Green
} catch {
Write-Host "✗ 应用未启动,请先运行: mvn spring-boot:run" -ForegroundColor Red
exit 1
}
Write-Host ""
Write-Host "[2/4] 创建PayPal支付..." -ForegroundColor Yellow
# 生成随机订单号
$orderId = "TEST" + (Get-Date -Format "yyyyMMddHHmmss")
$body = @{
username = "testuser"
orderId = $orderId
amount = "10.00"
method = "PAYPAL"
} | ConvertTo-Json
try {
$result = Invoke-RestMethod -Uri "http://localhost:8080/api/payment/paypal/create" `
-Method Post `
-ContentType "application/json" `
-Body $body
Write-Host "✓ 支付创建成功!" -ForegroundColor Green
Write-Host ""
Write-Host "支付信息:" -ForegroundColor Cyan
Write-Host " Payment ID: $($result.paymentId)" -ForegroundColor White
Write-Host " 订单号: $orderId" -ForegroundColor White
Write-Host " 金额: $10.00 USD" -ForegroundColor White
Write-Host " PayPal Payment ID: $($result.externalTransactionId)" -ForegroundColor White
Write-Host ""
Write-Host "[3/4] 支付URL已生成" -ForegroundColor Yellow
Write-Host " $($result.paymentUrl)" -ForegroundColor Cyan
Write-Host ""
Write-Host "[4/4] 下一步操作:" -ForegroundColor Yellow
Write-Host " 1. 在浏览器中打开上面的URL" -ForegroundColor White
Write-Host " 2. 使用PayPal Sandbox测试账号登录" -ForegroundColor White
Write-Host " 3. 点击 'Pay Now' 完成支付" -ForegroundColor White
Write-Host " 4. 支付完成后会自动跳转回应用" -ForegroundColor White
Write-Host ""
# 询问是否自动打开浏览器
$open = Read-Host "是否在浏览器中打开支付URL? (Y/N)"
if ($open -eq "Y" -or $open -eq "y") {
Start-Process $result.paymentUrl
Write-Host "✓ 已在浏览器中打开支付页面" -ForegroundColor Green
}
Write-Host ""
Write-Host "========================================" -ForegroundColor Cyan
Write-Host "提示:" -ForegroundColor Yellow
Write-Host "- 如果还没有创建Sandbox测试账号请访问" -ForegroundColor White
Write-Host " https://developer.paypal.com/dashboard/accounts" -ForegroundColor Cyan
Write-Host "- 创建 Personal 账号作为买家" -ForegroundColor White
Write-Host "- 使用该账号登录并完成支付测试" -ForegroundColor White
Write-Host "========================================" -ForegroundColor Cyan
} catch {
Write-Host "✗ 创建支付失败" -ForegroundColor Red
Write-Host "错误信息: $($_.Exception.Message)" -ForegroundColor Red
Write-Host ""
Write-Host "可能的原因:" -ForegroundColor Yellow
Write-Host "1. PayPal配置未正确加载" -ForegroundColor White
Write-Host "2. PayPal Client ID或Secret不正确" -ForegroundColor White
Write-Host "3. 网络连接问题" -ForegroundColor White
Write-Host ""
Write-Host "请检查应用日志获取详细错误信息" -ForegroundColor Yellow
}