# QAUP 系统部署和更新说明

## 开发环境操作

### 生成程序更新文件

当代码修改后，需要生成新的jar文件供客户更新：

```bash
./deploy/simple/build-update.sh
```
生成包含详细说明的更新包：
- `qaup-admin.jar` - 应用程序
- `UPDATE-INSTRUCTIONS.md` - 详细更新说明
- `VERSION-INFO.txt` - 版本信息

**注意**：如果只需要jar文件，可以从生成的更新包中提取 `qaup-admin.jar` 文件单独发送给客户。

### 生成完整部署包
```bash
./deploy/simple/package.sh
```
生成包含所有组件的完整部署包，用于首次部署或重大版本更新。

---

## 客户环境操作

### 首次部署

### 1. 解压部署包
```bash
unzip qaup-deploy-20250105-143022.zip
cd qaup-deploy
```

### 2. 执行部署
```bash
./deploy.sh
```

### 3. 验证部署
```bash
# 检查服务状态
docker compose ps

# 访问系统
curl http://localhost:8080/actuator/health
```

## 程序更新（仅更新jar文件）

### 更新前准备

1. **确认当前系统状态**：
   ```bash
   cd qaup-deploy
   docker compose ps
   ```

2. **备份重要数据**（可选但推荐）：
   ```bash
   # 备份数据库
   docker exec qaup-postgres pg_dump -U qaup qaup > backup-$(date +%Y%m%d).sql
   
   # 备份配置文件
   cp config.yml config.yml.backup
   ```

### 更新步骤

### 1. 准备新版本文件

#### 如果收到的是完整更新包（.zip文件）：
```bash
# 解压更新包
unzip qaup-update-20250105-143022.zip
cd qaup-update-20250105-143022

# 查看更新说明
cat UPDATE-INSTRUCTIONS.md

# 复制jar文件到部署目录
cd ../qaup-deploy
cp ../qaup-update-20250105-143022/qaup-admin.jar new-app.jar
```

#### 如果收到的是jar文件：
```bash
cd qaup-deploy
cp /path/to/qaup-admin-20250105-143022.jar new-app.jar
```

### 2. 执行程序更新
```bash
./update.sh
```

### 3. 验证更新结果
```bash
# 检查服务状态
docker compose ps

# 检查应用日志
docker compose logs -f qaup-app

# 访问系统确认功能正常
curl http://localhost:8080/actuator/health
```

## 更新失败处理

如果更新失败，脚本会自动尝试回滚。如果自动回滚也失败：

### 手动回滚：
```bash
# 停止应用
docker compose stop qaup-app

# 恢复备份文件
cp app.jar.backup.* app.jar

# 启动应用
docker compose start qaup-app
```

### 检查问题：
```bash
# 查看应用日志
docker compose logs qaup-app

# 查看所有服务状态
docker compose ps -a
```

## 配置文件更新

如果新版本需要更新配置文件：

1. **备份当前配置**：
   ```bash
   cp config.yml config.yml.backup
   ```

2. **更新配置**：
   ```bash
   # 编辑配置文件
   vi config.yml
   ```

3. **重启应用**：
   ```bash
   docker compose restart qaup-app
   ```

## 常见问题

### Q: 更新后无法访问系统
A: 检查端口是否被占用，查看应用日志：
```bash
docker compose logs qaup-app
netstat -tlnp | grep 8080
```

### Q: 数据库连接失败
A: 检查数据库服务状态：
```bash
docker compose logs qaup-postgres
docker exec qaup-postgres pg_isready -U qaup
```

### Q: 如何完全重新部署
A: 如果更新出现严重问题，可以重新部署：
```bash
# 停止所有服务
docker compose down

# 清理数据（注意：这会删除所有数据）
rm -rf data/

# 重新部署
./deploy.sh
```

## 完整系统重新部署

如果需要重新部署整个系统（包括更新Docker镜像、配置等）：

### 1. 获取新的部署包
```bash
# 解压新的部署包到新目录
unzip qaup-deploy-new-20250110-100000.zip
cd qaup-deploy-new
```

### 2. 迁移数据（如果需要保留数据）
```bash
# 从旧系统备份数据
cd ../qaup-deploy
docker exec qaup-postgres pg_dump -U qaup qaup > ../data-backup.sql

# 停止旧系统
docker compose down

# 在新系统中恢复数据
cd ../qaup-deploy-new
./deploy.sh
docker exec -i qaup-postgres psql -U qaup qaup < ../data-backup.sql
```

## 操作流程总结

### 开发环境 → 客户环境流程

#### 程序更新流程：
```
开发环境:
1. 代码修改完成
2. ./deploy/simple/build-update.sh       # 生成更新包
3. 发送更新包或jar文件给客户

客户环境:
1. cd qaup-deploy
2. cp new-jar-file.jar new-app.jar       # 重命名文件
3. ./update.sh                           # 执行更新
4. 验证更新结果
```

#### 完整部署流程：
```
开发环境:
1. ./deploy/simple/package.sh            # 生成完整部署包
2. 发送部署包给客户

客户环境:
1. unzip qaup-deploy-xxx.zip             # 解压部署包
2. cd qaup-deploy
3. ./deploy.sh                           # 执行部署
4. 验证部署结果
```

## 更新记录

建议记录每次更新的信息：
- 更新时间
- 版本号
- 更新人员
- 更新类型（程序更新/完整部署）
- 是否成功
- 遇到的问题

示例：
```
2025-01-05 14:30 - v1.0.1 → v1.0.2 - 张三 - 程序更新 - 成功
2025-01-10 09:15 - v1.0.2 → v1.0.3 - 李四 - 程序更新 - 失败，已回滚
2025-01-15 16:00 - v1.0.3 → v1.1.0 - 王五 - 完整部署 - 成功
```

## 文件说明

### 开发环境脚本：
- `deploy/simple/build-update.sh` - 生成程序更新包
- `deploy/simple/package.sh` - 生成完整部署包

### 客户环境脚本：
- `deploy.sh` - 首次部署脚本
- `update.sh` - 程序更新脚本
- `DeployGuide.md` - 本说明文档