QDAirPortBackend0122/deploy/DeployGuide.md
2026-01-22 13:19:47 +08:00

349 lines
7.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# QAUP 系统部署和更新说明
## 一、打包环境操作
### 1. 生成程序更新文件
修改代码后生成仅包含应用jar的更新包
```bash
./deploy/package-update.sh
```
**输出**
- `qaup-admin.jar` - 应用程序
- `UPDATE-INSTRUCTIONS.md` - 更新说明
- `VERSION-INFO.txt` - 版本信息
**注意**如需单独jar文件可直接从更新包中提取。
### 2. 生成完整部署包
生成包含所有组件的完整部署包(首次部署或重大更新):
```bash
./deploy/package-all.sh
```
---
## 二、生产环境操作
### 1. 首次部署
#### 步骤
1. **解压部署包**
```bash
mkdir qaup-deploy
tar -xzf qaup-deploy-xxx.tar.gz -C qaup-deploy
cd qaup-deploy
```
2. **执行部署**
```bash
./deploy-all.sh
```
3. **验证部署**
```bash
docker compose ps # 检查服务状态
curl http://localhost:8080/actuator/health # 验证应用健康
```
### 2. 程序更新仅更新jar文件
#### 前置准备
```bash
cd qaup-deploy
# 1. 确认当前系统状态
docker compose ps
# 2. 备份重要数据(推荐)
docker exec qaup-postgres pg_dump -U qaup qaup > backup-$(date +%Y%m%d).sql
cp config.yml config.yml.backup
```
#### 更新步骤
```bash
# 1. 准备新版本文件(二选一)
# 方案A使用完整更新包
cp /path/to/qaup-update-xxx/qaup-admin.jar new-app.jar
# 方案B直接使用jar文件
cp /path/to/qaup-admin-xxx.jar new-app.jar
# 2. 执行更新
./deploy-update.sh
# 3. 验证更新
docker compose ps # 检查服务状态
docker compose logs -f qaup-app # 查看应用日志
curl http://localhost:8080/actuator/health # 验证应用健康
```
### 3. 配置文件更新
如果需要更新配置文件:
```bash
cd qaup-deploy
# 1. 备份当前配置
cp config.yml config.yml.backup
# 2. 编辑配置文件
vi config.yml
# 3. 重启应用
docker compose restart qaup-app
```
### 4. 更新失败处理
#### 自动回滚
更新失败时脚本会自动尝试回滚。
#### 手动回滚
```bash
cd qaup-deploy
# 1. 停止应用
docker compose stop qaup-app
# 2. 恢复备份文件
cp app.jar.backup.* app.jar
# 3. 启动应用
docker compose start qaup-app
```
#### 问题排查
```bash
# 查看应用日志
docker compose logs qaup-app
# 查看所有服务状态
docker compose ps -a
```
### 5. 完全重新部署
如果需要重新部署整个系统(包括更新镜像、配置):
#### 方案A不保留数据
```bash
cd qaup-deploy
# 1. 清理旧环境
docker compose down
rm -rf data/ # 注意:会删除所有数据
# 2. 重新部署
./deploy-all.sh
```
#### 方案B保留数据
```bash
# 1. 备份旧数据
cd qaup-deploy
docker exec qaup-postgres pg_dump -U qaup qaup > ../data-backup.sql
# 2. 清理旧环境
docker compose down
# 3. 部署新系统
mkdir qaup-deploy-new
tar -xzf qaup-deploy-new-xxx.tar.gz -C qaup-deploy-new
cd qaup-deploy-new
./deploy-all.sh
# 4. 恢复数据
docker exec -i qaup-postgres psql -U qaup qaup < ../data-backup.sql
```
## 三、常见问题
### Q: 更新后无法访问系统?
A: 检查端口和应用日志:
```bash
docker compose logs qaup-app
```
### Q: 端口冲突?
A: 检查端口占用:
```bash
netstat -tlnp | grep 8080
```
### Q: 数据库连接失败?
A: 检查数据库服务状态:
```bash
docker compose logs qaup-postgres
docker exec qaup-postgres pg_isready -U qaup
```
## 四、更新记录
建议记录每次更新信息:
```
时间 | 版本号 | 人员 | 类型 | 结果 | 问题
2025-01-05 | v1.0.1→v1.0.2 | 张三 | 程序更新 | 成功 | -
2025-01-10 | v1.0.2→v1.0.3 | 李四 | 程序更新 | 失败 | 配置错误,已回滚
```
## 五、数据库部署和更新策略
### 1. 数据库版本管理
系统使用Flyway进行数据库版本管理所有迁移脚本位于`qaup-admin/src/main/resources/db/migration/`目录下。
**迁移脚本列表**
- `V1.0.0__Initial_baseline.sql` - 基线结构86KB
- `V1.0.1__Initial_data.sql` - 初始数据50KB
- `README.md` - 迁移脚本说明
#### Flyway配置在docker-compose.yml中
```yaml
SPRING_FLYWAY_ENABLED: true # 启用Flyway
SPRING_FLYWAY_BASELINE_ON_MIGRATE: true # 基线迁移(支持已有数据库)
SPRING_FLYWAY_VALIDATE_ON_MIGRATE: true # 验证迁移
SPRING_FLYWAY_CLEAN_DISABLED: true # 禁止清理生产数据库
SPRING_FLYWAY_LOCATIONS: classpath:db/migration # 迁移脚本路径
```
### 2. 数据库部署流程
#### 首次部署(全新环境)
```bash
# 1. 启动基础服务PostgreSQL + Redis
docker compose up -d qaup-postgres qaup-redis
# 2. 等待数据库就绪
sleep 30
# 3. 初始化数据库执行Flyway迁移
# 应用启动时会自动执行Flyway迁移
docker compose up -d qaup-app
# 4. 验证部署
docker compose ps
curl http://localhost:8080/actuator/health
```
#### 已有环境更新
```bash
# Flyway自动处理数据库迁移
# 应用启动时会自动检测并执行需要的迁移
docker compose restart qaup-app
# 检查迁移状态
docker exec qaup-postgres psql -U qaup -d qaup -c "SELECT * FROM flyway_schema_history ORDER BY installed_rank;"
```
### 3. 数据库迁移脚本管理
#### 脚本命名规范
- `V{版本号}__{描述}.sql` - 版本化迁移脚本
- `V1.0.0__Initial_baseline.sql` - 基线结构
- `V1.0.1__Initial_data.sql` - 初始数据
- `V1.0.2__Add_new_feature.sql` - 新功能
#### 迁移类型
1. **结构迁移** - 修改表结构、索引等
2. **数据迁移** - 数据清洗、转换等
3. **函数/存储过程迁移** - 业务逻辑更新
### 4. 数据库维护操作
#### 数据备份和恢复(仅限紧急情况)
```bash
# 备份数据
docker exec qaup-postgres pg_dump -U qaup qaup > backup-$(date +%Y%m%d_%H%M%S).sql
# 恢复数据(生产环境需要谨慎)
cat backup-20250115_143000.sql | docker exec -i qaup-postgres psql -U qaup -d qaup
```
#### 数据库状态监控
```bash
# 查看Flyway迁移状态应用启动日志
docker compose logs qaup-app | grep -i flyway
# 直接查询迁移历史
docker exec qaup-postgres psql -U qaup -d qaup -c "
SELECT version, description, installed_on
FROM flyway_schema_history
ORDER BY installed_rank;"
# 检查应用健康状态
curl http://localhost:8080/actuator/health
```
### 5. 数据库更新最佳实践
#### 开发环境
- 可以使用`flyway.clean()`清理数据库
- 可以使用`flyway.migrate().clean()`重建
#### 生产环境
- 禁止使用`flyway.clean()`
- 优先使用增量迁移脚本
- 重大变更需要测试环境验证
#### 回滚策略
1. **自动化回滚** - 备份恢复
2. **脚本化回滚** - 创建回滚脚本
3. **版本控制** - 通过Flyway版本管理
## 六、文件说明
### 打包环境脚本
- `deploy/package-update.sh` - 生成程序更新包
- `deploy/package-all.sh` - 生成完整部署包
### 生产环境脚本
- `deploy-all.sh` - 首次部署/完全重新部署
- `deploy-update.sh` - 程序更新脚本(自动处理数据库迁移)
- `DeployGuide.md` - 本说明文档
### 数据库脚本目录
- `src/main/resources/db/migration/` - Flyway迁移脚本
- `sql/qaup_database_complete_init.sql` - 完整初始化脚本(参考用途)
- `sql/unified_database_migration.sql` - 合并迁移脚本(历史用途)