# QAUP 系统离线部署指南

## 概述

本文档详细介绍了如何在无互联网连接的内网环境中部署 QAUP 系统。离线部署包含所有必需的 Docker 镜像、配置文件和脚本，确保在完全隔离的网络环境中也能成功部署。

## 离线部署流程

### 阶段一：准备离线部署包（在有网络环境中进行）

#### 1. 环境要求

**准备环境**：
- 有互联网连接的 Linux/macOS 系统
- Docker 20.10+ 和 Docker Compose 1.29+
- 至少 10GB 可用磁盘空间

#### 2. 获取项目代码

```bash
# 克隆或下载项目代码
git clone <项目地址>
cd QAUP-Management

# 或者解压项目源码包
tar -xzf qaup-source-code.tar.gz
cd QAUP-Management
```

#### 3. 准备 Docker 镜像

```bash
# 运行镜像准备脚本
./docker/prepare-offline-images.sh
```

该脚本将执行以下操作：
- 拉取所有必需的基础镜像
- 构建自定义应用镜像
- 导出所有镜像为 tar.gz 文件
- 生成镜像清单和校验和

#### 4. 完成离线部署包创建

镜像准备脚本执行完成后，会自动创建完整的离线部署包：

```bash
# 脚本执行完成后，会显示类似输出：
# 离线部署包创建完成: qaup-offline-deploy-20240801_143022.tar.gz
# 部署包大小: 1.2G

# 查看生成的文件
ls -lh qaup-offline-deploy-*.tar.gz
```

**离线部署包包含：**
- Docker镜像文件（images/）
- 部署脚本（scripts/）
- Docker配置（docker/）
- 文档（docs/）
- 配置文件（docker-compose.yml, docker-compose.prod.yml, .env.template）
- 镜像导入脚本
- 校验和文件

### 阶段二：离线部署（在客户内网环境中进行）

#### 1. 传输部署包

将离线部署包传输到目标服务器：

```bash
# 通过 U盘、移动硬盘等方式传输文件
# 或通过内网文件传输
scp qaup-offline-deploy-*.tar.gz user@target-server:/opt/
```

#### 2. 解压和验证

```bash
# 进入目标目录
cd /opt

# 验证文件完整性
sha256sum -c qaup-offline-deploy-*.tar.gz.sha256

# 解压部署包
tar -xzf qaup-offline-deploy-*.tar.gz
cd qaup-offline-deploy-*
```

#### 3. 运行离线安装

```bash
# 导入镜像
./scripts/load-images.sh

# 初始化配置
./scripts/deploy.sh init
```

安装脚本将：
- 检查 Docker 环境
- 导入所有 Docker 镜像
- 初始化配置文件
- 设置脚本权限
- 创建必要目录

#### 4. 配置系统

```bash
# 复制环境配置模板
cp .env.template .env

# 编辑环境配置
nano .env
```

**重要配置项**：
```bash
# 数据库配置
POSTGRES_PASSWORD=设置强密码
APP_DB_PASSWORD=设置强密码

# 服务器配置
SERVER_NAME=内网IP或域名
NGINX_PORT=80

# 其他配置根据实际环境调整
```

**手动部署方式**（如果部署脚本遇到问题）：
```bash
# 1. 导入镜像
./scripts/load-images.sh

# 2. 配置环境变量
cp .env.template .env
# 编辑 .env 文件，设置数据库密码、端口等配置

# 3. 启动服务
docker-compose -f docker-compose.yml -f docker-compose.prod.yml --env-file .env up -d

# 4. 查看服务状态
docker-compose -f docker-compose.yml -f docker-compose.prod.yml ps
```

#### 5. 启动系统

```bash
# 一键部署
./scripts/deploy.sh install
```

## 离线环境特殊配置

### 1. 时间同步

内网环境可能无法自动同步时间：

```bash
# 手动设置系统时间
sudo date -s "2024-01-01 12:00:00"

# 或配置内网 NTP 服务器
sudo nano /etc/systemd/timesyncd.conf
# 添加: NTP=内网NTP服务器IP
```

### 2. DNS 配置

```bash
# 配置内网 DNS
sudo nano /etc/resolv.conf
# 添加: nameserver 内网DNS服务器IP

# 或在 hosts 文件中添加必要的域名解析
sudo nano /etc/hosts
```

### 3. 防火墙配置

```bash
# 配置防火墙规则
sudo ufw allow from 内网网段 to any port 80
sudo ufw allow from 内网网段 to any port 443
sudo ufw enable
```

## 离线更新

### 1. 准备更新包

在有网络的环境中：

```bash
# 构建新版本镜像（会自动创建更新包）
./deploy/docker/prepare-offline-images.sh
```

### 2. 应用更新

在离线环境中：

```bash
# 备份当前配置
./docker/config-manager.sh backup

# 停止服务
./deploy.sh stop

# 解压更新包
tar -xzf qaup-offline-deploy-*.tar.gz

# 导入新镜像
./scripts/load-images.sh

# 启动服务
./deploy.sh start
```

## 离线监控

### 1. 本地监控

```bash
# 启动本地监控
./docker/monitor.sh watch 60

# 设置告警监控
./docker/alert-manager.sh monitor 300 &
```

### 2. 日志管理

```bash
# 配置日志轮转
./docker/log-manager.sh setup

# 定期清理日志
echo "0 2 * * * /opt/qaup/docker/log-manager.sh cleanup 30" | crontab -
```

## 离线备份

### 1. 数据备份

使用内置的备份脚本：

```bash
# 手动备份
./docker/backup-restore.sh backup

# 设置定时备份
echo "0 1 * * * /opt/qaup/docker/backup-restore.sh backup" | crontab -
```

### 2. 系统备份

```bash
# 完整系统备份
tar -czf qaup-system-backup-$(date +%Y%m%d).tar.gz \
    --exclude='data/postgres' \
    --exclude='logs' \
    .
```

## 故障排除

### 1. 镜像导入失败

```bash
# 检查镜像文件
ls -la images/

# 验证镜像文件完整性
cd images && sha256sum -c checksums.sha256

# 手动导入单个镜像
gunzip -c qaup-app.tar.gz | docker load
```

### 2. 服务无法启动

```bash
# 检查 Docker 服务
sudo systemctl status docker

# 检查容器日志
docker logs qaup-app
docker logs qaup-postgres

# 检查网络连接
docker network ls
```

### 3. 配置问题

```bash
# 验证配置文件
./docker/config-manager.sh validate

# 重新初始化配置
./docker/config-manager.sh init
```

## 安全考虑

### 1. 网络隔离

```bash
# 确保容器网络隔离
docker network inspect qaup_qaup-network

# 配置防火墙规则
sudo ufw deny out 53
sudo ufw deny out 80
sudo ufw deny out 443
```

### 2. 访问控制

```bash
# 设置文件权限
chmod 600 .env
chmod 700 data/
chmod 755 logs/

# 限制用户访问
sudo chown -R qaup:qaup /opt/qaup
```

### 3. 审计日志

```bash
# 启用系统审计
sudo apt install auditd
sudo systemctl enable auditd

# 配置审计规则
echo "-w /opt/qaup -p wa -k qaup-access" | sudo tee -a /etc/audit/rules.d/qaup.rules
```

## 性能优化

### 1. 内网优化

```bash
# 调整网络参数
echo 'net.core.rmem_max = 16777216' | sudo tee -a /etc/sysctl.conf
echo 'net.core.wmem_max = 16777216' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
```

### 2. 存储优化

```bash
# 使用本地存储
# 修改 docker-compose.yml 中的卷配置
# 使用高性能磁盘存储数据库文件
```

## 维护计划

### 日常维护

使用内置的运维脚本：

```bash
# 系统状态检查
./docker/monitor.sh status

# 系统清理
./docker/ops-manager.sh cleanup

# 设置定时维护
echo "0 6 * * * /opt/qaup/docker/ops-manager.sh daily-maintenance" | crontab -
```

### 定期检查

- 每日：系统状态检查、日志查看
- 每周：性能监控、备份验证
- 每月：安全检查、配置审核
- 每季度：系统更新、容量规划

---

**注意**: 离线环境部署需要特别注意安全和稳定性，建议在部署前进行充分测试。