项目重构: 整理目录结构, 更新前后端代码, 添加测试和数据库迁移
This commit is contained in:
76
demo/scripts/deploy/LINUX_DEPLOY_SCRIPT.sh
Normal file
76
demo/scripts/deploy/LINUX_DEPLOY_SCRIPT.sh
Normal 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 "前端服务可能还在启动中,请稍后检查"
|
||||
44
demo/scripts/deploy/build-backend-for-baota.bat
Normal file
44
demo/scripts/deploy/build-backend-for-baota.bat
Normal 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
|
||||
53
demo/scripts/deploy/build-backend-for-baota.sh
Normal file
53
demo/scripts/deploy/build-backend-for-baota.sh
Normal 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 ""
|
||||
141
demo/scripts/deploy/deploy-linux.sh
Normal file
141
demo/scripts/deploy/deploy-linux.sh
Normal 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}"
|
||||
|
||||
|
||||
|
||||
74
demo/scripts/deploy/deploy-to-server.sh
Normal file
74
demo/scripts/deploy/deploy-to-server.sh
Normal 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 " Swagger:https://vionow.com/swagger-ui.html"
|
||||
echo ""
|
||||
echo "📋 查看实时日志:"
|
||||
echo " ssh $SERVER 'tail -f /opt/aigc/app.log'"
|
||||
168
demo/scripts/deploy/deploy.ps1
Normal file
168
demo/scripts/deploy/deploy.ps1
Normal 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
|
||||
71
demo/scripts/deploy/deploy.sh
Normal file
71
demo/scripts/deploy/deploy.sh
Normal 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"
|
||||
|
||||
Reference in New Issue
Block a user