Files
KnowledgeBase/.kiro/specs/docker-deployment/design.md
lizhuoran 3c206e9e06 feat: 新增 Docker 部署支持、Swoole/Octane 集成及相关优化
- 添加 Dockerfile 与多套 docker-compose 配置(开发/生产环境)
- 集成 Laravel Octane (Swoole) 提升性能
- 新增健康检查、监控脚本及部署文档
- 新增 Docker 镜像离线导入包(MySQL/Redis/Meilisearch)
- 优化文档转换、预览服务及队列任务
- 添加 CreateAdminUser 命令与路由健康检查接口
- 新增 Swoole 队列兼容性测试套件

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-28 15:51:19 +08:00

8.1 KiB
Raw Blame History

Docker部署设计文档

概述

本设计文档描述了将Laravel知识库系统Docker化部署到OpenEuler服务器的完整解决方案。系统采用微服务架构通过Docker容器化技术实现应用的标准化部署和运维。

设计目标:

  • 构建适用于OpenEuler服务器的amd64架构Docker镜像
  • 实现完整的应用栈容器化编排
  • 确保数据持久化和服务高可用性
  • 支持开发和生产环境的不同配置需求
  • 提供便捷的镜像打包和离线部署能力

架构

整体架构

系统采用多容器架构,包含以下核心组件:

graph TB
    subgraph "Docker Host (OpenEuler)"
        subgraph "Application Stack"
            nginx[Nginx容器<br/>Web服务器]
            app[Laravel应用容器<br/>PHP-FPM]
            queue[队列处理容器<br/>Laravel Queue]
        end
        
        subgraph "Data Layer"
            mysql[MySQL容器<br/>主数据库]
            redis[Redis容器<br/>缓存/会话]
            meilisearch[Meilisearch容器<br/>搜索引擎]
        end
        
        subgraph "Storage"
            app_data[应用数据卷]
            db_data[数据库数据卷]
            search_data[搜索数据卷]
            logs[日志卷]
        end
    end
    
    nginx --> app
    app --> mysql
    app --> redis
    app --> meilisearch
    queue --> mysql
    queue --> redis
    
    app --> app_data
    mysql --> db_data
    meilisearch --> search_data
    nginx --> logs
    app --> logs

网络架构

  • 外部网络: 通过宿主机端口映射提供Web服务访问
  • 内部网络: 创建专用Docker网络供容器间通信
  • 服务发现: 通过容器名称进行服务间通信

存储架构

  • 代码存储: 项目目录映射到应用容器,支持开发时热重载
  • 数据持久化: 数据库、搜索引擎、上传文件使用Docker卷持久化
  • 日志管理: 应用日志映射到宿主机便于监控和调试

组件和接口

Docker镜像组件

1. Laravel应用镜像 (knowledge-base-app)

  • 基础镜像: php:8.2-fpm-alpine
  • 运行时: PHP-FPM + Nginx
  • 依赖: Composer包、NPM构建产物、Pandoc
  • 配置: PHP扩展、Nginx配置、应用配置

2. 数据库组件 (MySQL)

  • 镜像: mysql:8.0
  • 配置: 字符集utf8mb4、时区设置
  • 存储: 数据目录持久化

3. 缓存组件 (Redis)

  • 镜像: redis:7-alpine
  • 配置: 内存限制、持久化策略
  • 用途: 会话存储、应用缓存、队列存储

4. 搜索组件 (Meilisearch)

  • 镜像: getmeili/meilisearch:v1.5
  • 配置: 主密钥、环境模式
  • 存储: 索引数据持久化

服务接口

Web服务接口

  • 端口: 80 (HTTP)
  • 协议: HTTP/1.1
  • 负载均衡: Nginx upstream配置

数据库接口

  • 端口: 3306 (内部)
  • 协议: MySQL Protocol
  • 连接池: Laravel数据库连接配置

缓存接口

  • 端口: 6379 (内部)
  • 协议: Redis Protocol
  • 连接: phpredis扩展

搜索接口

  • 端口: 7700 (内部)
  • 协议: HTTP REST API
  • 认证: Master Key

数据模型

容器配置模型

# docker-compose.yml结构
services:
  app:
    image: knowledge-base-app:latest
    platform: linux/amd64
    environment:
      - APP_ENV=production
      - DB_HOST=mysql
      - REDIS_HOST=redis
      - MEILISEARCH_HOST=http://meilisearch:7700
    volumes:
      - ./:/var/www/html
      - storage_data:/var/www/html/storage
    depends_on:
      - mysql
      - redis
      - meilisearch

环境变量模型

# 生产环境变量
APP_ENV=production
APP_DEBUG=false
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
REDIS_HOST=redis
REDIS_PORT=6379
MEILISEARCH_HOST=http://meilisearch:7700

存储卷模型

volumes:
  mysql_data:
    driver: local
  redis_data:
    driver: local
  meilisearch_data:
    driver: local
  storage_data:
    driver: local

正确性属性

属性是应该在系统的所有有效执行中保持为真的特征或行为——本质上是关于系统应该做什么的正式声明。属性作为人类可读规范和机器可验证正确性保证之间的桥梁。

属性1: 镜像架构一致性

对于任何构建的Docker镜像检查其架构信息应该返回linux/amd64 验证: 需求 1.1

属性2: PHP环境完整性

对于任何构建的应用镜像在容器内执行PHP版本检查应该返回8.2.x版本且包含所有必需扩展 验证: 需求 1.2

属性3: 构建产物存在性

对于任何构建的应用镜像vendor目录和public/js、public/css目录应该存在且包含必要文件 验证: 需求 1.3

属性4: 服务启动一致性

对于任何docker-compose启动操作所有定义的服务容器应该成功启动并达到健康状态 验证: 需求 2.1, 2.2, 2.3, 2.4, 2.5

属性5: 数据持久化保证

对于任何容器重启操作,持久化存储中的数据应该保持不变且可访问 验证: 需求 3.2, 3.3, 3.4

属性6: 服务连接性

对于任何运行中的服务栈,应用容器应该能够成功连接到所有依赖服务 验证: 需求 4.2, 4.3, 4.4

属性7: 健康检查响应性

对于任何运行中的服务,健康检查端点应该在合理时间内返回成功响应 验证: 需求 5.1, 5.2, 5.3, 5.4

属性8: 容器自愈能力

对于任何模拟的容器故障,系统应该根据重启策略自动恢复服务 验证: 需求 5.5

属性9: 镜像导出完整性

对于任何导出的Docker镜像tar文件应该包含完整的镜像层和元数据信息 验证: 需求 6.1

属性10: 镜像导入兼容性

对于任何导出的镜像tar文件在OpenEuler环境中导入后应该能够正常运行 验证: 需求 6.2

属性11: 压缩效率

对于任何镜像压缩操作,压缩后的文件大小应该显著小于原始大小 验证: 需求 6.3

属性12: 完整性验证

对于任何镜像文件,完整性检查应该能够验证文件未被损坏且架构正确 验证: 需求 6.4

属性13: 开发环境热重载

对于任何开发环境中的代码修改,应用应该在合理时间内反映更改 验证: 需求 7.1

错误处理

容器启动失败

  • 检测: 健康检查失败或容器退出
  • 处理: 自动重启策略,最大重试次数限制
  • 日志: 详细错误日志记录到宿主机

服务连接失败

  • 检测: 连接超时或拒绝连接
  • 处理: 重试机制,降级服务
  • 监控: 连接状态监控和告警

数据持久化失败

  • 检测: 卷挂载失败或权限错误
  • 处理: 容器启动前预检查
  • 恢复: 数据备份和恢复机制

镜像构建失败

  • 检测: 构建过程中的错误退出
  • 处理: 分阶段构建,错误定位
  • 优化: 构建缓存和依赖管理

测试策略

单元测试方法

容器构建测试:

  • 验证Dockerfile语法正确性
  • 测试构建过程中的关键步骤
  • 检查构建产物的完整性

配置文件测试:

  • 验证docker-compose.yml语法
  • 测试环境变量配置的正确性
  • 检查网络和存储配置

脚本功能测试:

  • 测试部署脚本的执行流程
  • 验证健康检查脚本的准确性
  • 测试备份和恢复脚本

属性测试方法

测试框架: 使用Bash脚本结合Docker命令进行属性测试每个属性测试运行100次迭代以确保可靠性。

测试环境:

  • 本地Docker环境用于开发测试
  • OpenEuler虚拟机用于兼容性测试
  • CI/CD环境用于自动化测试

测试数据生成:

  • 随机生成不同的环境配置
  • 模拟各种故障场景
  • 生成不同规模的测试数据

属性测试实现要求:

  • 每个正确性属性必须实现为单独的属性测试
  • 测试必须标注对应的设计文档属性编号
  • 使用格式: # Feature: docker-deployment, Property X: [属性描述]
  • 每个属性测试最少运行100次迭代
  • 测试应该覆盖各种输入组合和边界条件

集成测试:

  • 端到端部署流程测试
  • 服务间通信测试
  • 数据一致性测试
  • 性能基准测试