QAUP_Management/.kiro/specs/docker-deployment/design.md

260 lines
5.3 KiB
Markdown
Raw 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 项目的 Docker 容器化部署架构。该方案将整个项目打包为多个 Docker 容器,包括后端应用、前端应用、数据库和缓存服务,适用于在客户的 Ubuntu 系统上进行生产环境部署。
## 架构
### 整体架构图
```mermaid
graph TB
subgraph "Docker Host (Ubuntu)"
subgraph "qaup-network"
nginx[Nginx容器<br/>端口: 80, 443]
app[QAUP应用容器<br/>端口: 8080]
postgres[(PostgreSQL容器<br/>端口: 5432)]
redis[(Redis容器<br/>端口: 6379)]
end
subgraph "Docker Volumes"
db_data[数据库数据卷]
app_logs[应用日志卷]
upload_files[文件上传卷]
nginx_conf[Nginx配置卷]
end
end
Client[客户端浏览器] --> nginx
nginx --> app
app --> postgres
app --> redis
postgres -.-> db_data
app -.-> app_logs
app -.-> upload_files
nginx -.-> nginx_conf
```
### 容器组件
1. **Nginx 容器**: 反向代理和静态文件服务
2. **QAUP 应用容器**: Spring Boot 应用(包含所有模块)
3. **PostgreSQL 容器**: 数据库服务(包含 PostGIS 扩展)
4. **Redis 容器**: 缓存和会话存储
## 组件和接口
### 1. QAUP 应用容器
**基础镜像**: `openjdk:17-jre-slim`
**功能**:
- 运行 qaup-admin.jar包含所有模块
- 提供 REST API 服务
- 处理定时任务
- 管理文件上传
**配置**:
- JVM 参数优化
- 环境变量配置
- 健康检查端点
### 2. Nginx 容器
**基础镜像**: `nginx:alpine`
**功能**:
- 反向代理到后端应用
- 服务前端静态文件
- SSL 终止(可选)
- 负载均衡(单实例时作为代理)
**配置**:
- 自定义 nginx.conf
- 前端构建文件挂载
- 日志配置
### 3. PostgreSQL 容器
**基础镜像**: `postgis/postgis:15-3.3`
**功能**:
- 数据持久化存储
- 空间数据支持PostGIS
- 数据库初始化脚本
**配置**:
- 数据库初始化
- 性能参数调优
- 数据卷挂载
### 4. Redis 容器
**基础镜像**: `redis:7-alpine`
**功能**:
- 缓存存储
- 会话管理
- 数据持久化
**配置**:
- Redis 配置文件
- 持久化策略
- 内存限制
## 数据模型
### Docker Compose 配置结构
```yaml
version: '3.8'
services:
qaup-app:
# 应用服务配置
qaup-nginx:
# Nginx 服务配置
qaup-postgres:
# PostgreSQL 服务配置
qaup-redis:
# Redis 服务配置
volumes:
# 数据卷定义
networks:
# 网络定义
```
### 环境变量配置
**应用配置**:
- `SPRING_PROFILES_ACTIVE`: 激活的配置文件
- `DB_HOST`, `DB_PORT`, `DB_NAME`: 数据库连接
- `REDIS_HOST`, `REDIS_PORT`: Redis 连接
- `UPLOAD_PATH`: 文件上传路径
**数据库配置**:
- `POSTGRES_DB`: 数据库名称
- `POSTGRES_USER`: 数据库用户
- `POSTGRES_PASSWORD`: 数据库密码
## 错误处理
### 容器故障处理
1. **自动重启策略**
- 所有服务配置 `restart: unless-stopped`
- 健康检查失败时自动重启
2. **数据恢复**
- 数据库数据通过卷持久化
- 应用日志和上传文件持久化
3. **网络故障处理**
- 容器间通信通过内部网络
- 外部访问通过 Nginx 代理
### 监控和告警
1. **健康检查**
- 应用: `/actuator/health`
- 数据库: `pg_isready`
- Redis: `redis-cli ping`
2. **日志管理**
- 应用日志通过卷挂载
- 容器日志通过 Docker 日志驱动
- 日志轮转配置
## 测试策略
### 部署测试
1. **容器启动测试**
- 验证所有容器正常启动
- 检查容器间网络连通性
2. **功能测试**
- API 接口可访问性
- 前端页面加载
- 数据库连接正常
3. **持久化测试**
- 容器重启后数据保持
- 文件上传功能正常
### 性能测试
1. **资源使用测试**
- 内存使用监控
- CPU 使用监控
- 磁盘 I/O 监控
2. **并发测试**
- 多用户同时访问
- 数据库连接池测试
## 安全考虑
### 网络安全
1. **网络隔离**
- 使用自定义 Docker 网络
- 仅暴露必要端口
2. **访问控制**
- 数据库仅允许应用容器访问
- Redis 仅允许内部网络访问
### 数据安全
1. **敏感信息管理**
- 使用环境变量或 Docker secrets
- 数据库密码加密存储
2. **文件权限**
- 容器内使用非 root 用户
- 挂载卷设置适当权限
## 部署流程
### 离线部署准备阶段(在有网络环境中进行)
1. **Docker 镜像准备**
- 构建所有自定义镜像
- 拉取所有基础镜像
- 导出镜像为 tar 文件
2. **应用构建**
- Maven 构建 JAR 包
- 创建应用 Docker 镜像
3. **前端构建**
- npm 构建前端资源
- 准备 Nginx 静态文件
4. **部署包打包**
- 打包所有 Docker 镜像文件
- 打包配置文件和脚本
- 创建离线安装包
### 现场部署阶段(在客户内网环境中进行)
1. **环境准备**
- 安装 Docker 和 Docker Compose
- 创建必要目录和权限
2. **镜像导入**
- 导入所有 Docker 镜像
- 验证镜像完整性
3. **服务启动**
- 启动数据库和缓存服务
- 初始化数据库架构
- 启动应用和 Nginx 服务
4. **验证部署**
- 健康检查验证
- 功能测试验证