From 3030eab81e5593f60177de0670c974debb4dea67 Mon Sep 17 00:00:00 2001 From: Tian jianyong <11429339@qq.com> Date: Thu, 16 Oct 2025 12:28:55 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=BA=86=E4=B8=80=E4=BA=9B?= =?UTF-8?q?=E9=83=A8=E7=BD=B2=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/deploy/Ubuntu部署指南.md | 295 ++++++++++++++++++ doc/deploy/database_migration.md | 27 ++ doc/deploy/deploy-design.md | 35 +++ .../src/main/resources/application-dev.yml | 2 +- .../src/main/resources/application-druid.yml | 4 +- 5 files changed, 360 insertions(+), 3 deletions(-) create mode 100644 doc/deploy/Ubuntu部署指南.md diff --git a/doc/deploy/Ubuntu部署指南.md b/doc/deploy/Ubuntu部署指南.md new file mode 100644 index 00000000..7e8449fd --- /dev/null +++ b/doc/deploy/Ubuntu部署指南.md @@ -0,0 +1,295 @@ +# Ubuntu部署指南 + +## 1. 系统环境准备 + +### Ubuntu系统要求 +- **操作系统**: Ubuntu 20.04 LTS 或更高版本 +- **内存**: 至少 8GB RAM +- **存储**: 至少 10GB 可用空间 +- **CPU**: 4核或以上 +- **网络**: 稳定的互联网连接 + +### 安装必要软件 +```bash +# 系统更新 +sudo apt update && sudo apt upgrade -y + +# 安装Java 21 +sudo apt install -y openjdk-21-jdk +java -version # 验证安装 + +# 安装Maven +sudo apt install -y maven +mvn -version # 验证安装 + +# 安装Docker +sudo apt install -y docker.io +sudo systemctl start docker +sudo systemctl enable docker + +# 将当前用户添加到docker组 +sudo usermod -aG docker $USER + +# 验证Docker +docker --version +``` + +## 2. 获取并编译项目 + +```bash +# 获取项目 +git clone +cd QAUP-Management + +# 编译项目 +mvn clean package -DskipTests + +# 验证编译结果 +ls -la qaup-admin/target/qaup-admin.jar +``` + +## 3. 部署方式 + +### 3.1 Docker Compose部署(推荐) + +```bash +# 创建部署目录 +mkdir -p ~/qaup-deploy +cd ~/qaup-deploy + +# 复制部署文件 +cp /path/to/QAUP-Management/deploy/docker-compose.yml . +cp /path/to/QAUP-Management/deploy/config.yml . +cp /path/to/QAUP-Management/qaup-admin/target/qaup-admin.jar ./app.jar + +# 创建数据目录 +mkdir -p data/postgres data/redis logs backup + +# 启动服务 +docker compose up -d + +# 检查服务状态 +docker compose ps +``` + +### 3.2 快速测试部署 + +> **注意**: 仅用于快速测试 + +```bash +# 创建运行目录 +mkdir -p ~/qaup-test +cd ~/qaup-test + +# 复制jar文件 +cp /path/to/QAUP-Management/qaup-admin/target/qaup-admin.jar ./ + +# 启动数据库和缓存服务 +docker run --name qaup-postgres -e POSTGRES_DB=qaup -e POSTGRES_USER=qaup -e POSTGRES_PASSWORD=qaup123 -p 5432:5432 -d postgis/postgis:17-3.5-alpine +docker run --name qaup-redis -p 6379:6379 -d redis:8.0-alpine + +# 等待服务启动 +sleep 30 + +# 运行应用 +java -jar qaup-admin.jar --spring.profiles.active=dev +``` + +## 4. 服务管理 + +### 启动/停止/重启 +```bash +# 启动服务 +cd ~/qaup-deploy +docker compose up -d + +# 停止服务 +docker compose down + +# 重启应用服务 +docker compose restart qaup-app + +# 查看服务状态 +docker compose ps + +# 查看日志 +docker compose logs -f qaup-app +``` + +## 5. 访问系统 + +### 系统地址 +- **Web管理**: http://:8080 +- **WebSocket**: ws://:8080/collision +- **健康检查**: http://:8080/actuator/health + +### 初始登录 +- **用户名**: admin +- **密码**: admin123 + +## 6. 应用更新 + +### 6.1 基本更新流程 + +```bash +# 备份当前版本 +cd ~/qaup-deploy +cp app.jar app.jar.backup.$(date +%Y%m%d_%H%M%S) + +# 替换新版本 +cp /path/to/new/qaup-admin.jar ./app.jar + +# 重启应用 +docker compose restart qaup-app + +# 验证更新 +curl http://localhost:8080/actuator/health +``` + +### 6.2 Java版本冲突解决 + +如果遇到 `UnsupportedClassVersionError` 错误,表示编译的jar文件与容器中Java版本不匹配: + +**错误示例**: +``` +Exception in thread "main" java.lang.UnsupportedClassVersionError: +com/qaup/QuapApplication has been compiled by a more recent version of the Java Runtime +(class file version 65.0), this version of the Java Runtime only recognizes +class file versions up to 61.0 +``` + +**解决方案**: + +1. **检查Docker镜像配置**: + 确保 `docker-compose.yml` 中使用Java 21镜像: + ```yaml + # QAUP 应用服务 + qaup-app: + image: m.daocloud.io/docker.io/library/eclipse-temurin:21-jre + ``` + +2. **修改并重新部署**: + ```bash + # 停止服务 + docker compose down + + # 备份原文件 + cp docker-compose.yml docker-compose.yml.bak + + # 修改Java版本(如果需要) + sed -i 's/eclipse-temurin:17-jre/eclipse-temurin:21-jre/' docker-compose.yml + + # 重新启动服务 + docker compose up -d + ``` + +3. **验证Java版本**: + ```bash + # 检查容器中Java版本 + docker exec qaup-app java -version + ``` + +### 6.3 完整更新流程 + +当遇到容器名称冲突或其他问题时,使用完整的更新流程: + +```bash +# 进入部署目录 +cd ~/qaup-deploy + +# 1. 停止现有服务 +docker compose down + +# 2. 确认所有容器已停止 +docker ps -a | grep qaup + +# 3. 如果还有残留容器,强制删除 +docker rm -f $(docker ps -aq --filter name=qaup) + +# 4. 备份当前jar文件 +cp app.jar app.jar.backup.$(date +%Y%m%d_%H%M%S) + +# 5. 替换新版本 +cp /path/to/new/qaup-admin.jar ./app.jar + +# 6. 启动新的服务 +docker compose up -d + +# 7. 检查服务状态 +docker compose ps + +# 8. 验证更新 +curl -s http://localhost:8080/actuator/health | jq +``` + +### 6.4 故障排除 + +#### 6.4.1 容器名称冲突 + +如果遇到容器名称冲突错误: +``` +Error response from daemon: Conflict. The container name "/qaup-app" is already in use +``` + +解决方法: +```bash +# 方式1:完全重建 +docker compose down +docker rm -f $(docker ps -aq --filter name=qaup) +docker compose up -d + +# 方式2:强制重新创建 +docker compose up -d --force-recreate + +# 方式3:只重新创建特定服务 +docker compose up -d --force-recreate qaup-app +``` + +#### 6.4.2 Java版本验证 + +确认容器中Java版本与编译版本匹配: +```bash +# 查看容器Java版本 +docker exec qaup-app java -version + +# 如果需要,检查镜像信息 +docker inspect qaup-app | grep -i java +``` + +## 7. 数据备份 + +```bash +# 数据库备份 +docker exec qaup-postgres pg_dump -U qaup qaup > backup-$(date +%Y%m%d).sql + +# 日志轮转(保留最近7天) +find ~/qaup-deploy/logs -name "*.log" -mtime +7 -delete +``` + +## 8. 常见问题 + +### 应用启动失败 +```bash +# 查看详细日志 +docker compose logs qaup-app + +# 检查数据库连接 +docker compose logs qaup-postgres +docker exec qaup-postgres pg_isready -U qaup +``` + +### 端口被占用 +```bash +# 检查端口使用情况 +netstat -tlnp | grep :8080 + +# 停止占用端口的进程 +sudo kill -9 $(lsof -t -i:8080) +``` + +### 数据库连接失败 +```bash +# 检查数据库服务 +docker compose ps +docker exec qaup-postgres pg_isready -U qaup +``` \ No newline at end of file diff --git a/doc/deploy/database_migration.md b/doc/deploy/database_migration.md index af1cc8cd..bfdb568f 100644 --- a/doc/deploy/database_migration.md +++ b/doc/deploy/database_migration.md @@ -108,6 +108,33 @@ rm qaup_database_export.sql rm drop_tables.sql ``` +## Java版本兼容性注意事项 + +如果在执行数据库迁移后更新应用,需要注意Java版本兼容性: + +### 版本匹配检查 +- **编译版本**: 确保应用jar文件在Java 21环境下编译 +- **运行版本**: Docker容器中运行Java 21 + +### 版本不匹配错误示例 +如果遇到 `UnsupportedClassVersionError` 错误: +``` +class file has been compiled by a more recent version of the Java Runtime +(class file version 65.0), this version of the Java Runtime only recognizes +class file versions up to 61.0 +``` + +### 解决方案 +1. 确认Docker镜像使用Java 21: + ```yaml + image: eclipse-temurin:21-jre + ``` + +2. 检查容器Java版本: + ```bash + docker exec java -version + ``` + --- **创建时间:** 2025-09-25 diff --git a/doc/deploy/deploy-design.md b/doc/deploy/deploy-design.md index 22ce8124..9a72ad3d 100644 --- a/doc/deploy/deploy-design.md +++ b/doc/deploy/deploy-design.md @@ -181,6 +181,13 @@ if [ ! -f "new-app.jar" ]; then exit 1 fi +# 验证Java版本兼容性(重要:确保jar与容器Java版本匹配) +echo "验证Java版本兼容性..." +if command -v java &> /dev/null; then + LOCAL_JAVA_VERSION=$(java -version 2>&1 | head -1 | cut -d'"' -f2 | sed 's/[^0-9.]*\([0-9.]*\).*/\1/') + echo "本地Java版本: $LOCAL_JAVA_VERSION" +fi + # 备份当前版本 cp app.jar app.jar.backup echo "已备份当前版本" @@ -204,6 +211,34 @@ sleep 30 echo "✅ 升级完成!" echo "如有问题,可执行回滚: cp app.jar.backup app.jar && docker compose restart app" ``` + +## 9. Java版本兼容性注意事项 + +### 9.1 编译与运行环境匹配 +- **编译环境**: 确保项目在Java 21环境下编译 +- **运行环境**: Docker镜像必须与编译版本匹配(`openjdk:21-jre-alpine` 或 `eclipse-temurin:21-jre`) + +### 9.2 常见版本错误 +如果遇到 `UnsupportedClassVersionError`,确认以下配置: +```yaml +# docker-compose.yml 中必须使用Java 21镜像 +services: + app: + # 错误示例(可能导致版本不匹配) + # image: openjdk:17-jre-alpine + + # 正确示例 + image: openjdk:21-jre-alpine +``` + +### 9.3 版本验证命令 +```bash +# 检查容器中Java版本 +docker exec java -version + +# 检查jar文件编译版本 +javap -cp -version +``` ## 9. 操作总结 ### 开发环境(一次性) diff --git a/qaup-admin/src/main/resources/application-dev.yml b/qaup-admin/src/main/resources/application-dev.yml index 19b1ffa2..ebd12656 100644 --- a/qaup-admin/src/main/resources/application-dev.yml +++ b/qaup-admin/src/main/resources/application-dev.yml @@ -39,7 +39,7 @@ spring: data: redis: # 地址 - host: localhost + host: 10.0.0.58 # 端口,默认为6379 port: 6379 # 数据库索引 diff --git a/qaup-admin/src/main/resources/application-druid.yml b/qaup-admin/src/main/resources/application-druid.yml index 3b730271..2b2fa706 100644 --- a/qaup-admin/src/main/resources/application-druid.yml +++ b/qaup-admin/src/main/resources/application-druid.yml @@ -7,8 +7,8 @@ spring: # 主库数据源(支持环境变量) master: url: jdbc:postgresql://${DB_HOST:localhost}:${DB_PORT:5432}/${DB_NAME:qaup}?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=Asia/Shanghai - username: ${DB_USERNAME:postgres} - password: ${DB_PASSWORD:123456} + username: ${DB_USERNAME:qaup} + password: ${DB_PASSWORD:qaup123} # 从库数据源 slave: # 从数据源开关/默认关闭