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>
This commit is contained in:
2026-02-28 15:51:19 +08:00
parent acf549c43c
commit 3c206e9e06
90 changed files with 12731 additions and 1255 deletions

View File

@@ -0,0 +1,126 @@
# 数据持久化和目录映射实现完成
## 任务概述
**任务3: 实现数据持久化和目录映射** 已完成
本任务实现了Docker部署中的完整数据持久化和目录映射配置确保容器重启后数据不丢失满足生产环境的可靠性要求。
## 实现的功能
### 1. 项目代码目录映射到容器 ✅
- **配置**: `./:/var/www/html`
- **用途**: 支持开发环境代码热重载
- **应用于**: 应用容器和队列容器
### 2. 上传文档存储目录持久化 ✅
- **文档存储**: `documents_data:/var/www/html/storage/app/private/documents`
- **公共文件**: `public_data:/var/www/html/storage/app/public`
- **映射到**: `./storage/app/private/documents``./storage/app/public`
### 3. 数据库数据目录持久化 ✅
- **配置**: `mysql_data:/var/lib/mysql`
- **映射到**: `./storage/mysql`
- **用途**: MySQL数据库文件持久化
### 4. 搜索引擎数据目录持久化 ✅
- **配置**: `meilisearch_data:/meili_data`
- **映射到**: `./storage/meilisearch`
- **用途**: Meilisearch搜索索引持久化
### 5. 日志目录映射到宿主机 ✅
- **应用日志**: `app_logs:/var/log``./storage/logs/app`
- **队列日志**: `queue_logs:/var/log``./storage/logs/queue`
- **Laravel日志**: `laravel_logs:/var/www/html/storage/logs``./storage/logs`
## 创建的文件和脚本
### 配置文件
- ✅ `docker-compose.yml` - 更新了完整的数据卷映射配置
- ✅ `storage/*/` - 创建了所有必要的存储目录结构
### 管理脚本
- ✅ `docker/init-storage.sh` - 存储目录初始化脚本
- ✅ `docker/test-persistence.sh` - 数据持久化测试脚本
- ✅ `docker/validate-storage-config.sh` - 完整配置验证脚本
### 文档
- ✅ `docker/STORAGE_CONFIGURATION.md` - 详细的存储配置说明文档
- ✅ `storage/*/.gitignore` - 数据目录的版本控制配置
## 存储目录结构
```
storage/
├── app/ # Laravel应用存储 (持久化)
│ ├── private/
│ │ ├── documents/ # 上传文档存储 (持久化)
│ │ └── markdown/ # Markdown文件存储
│ └── public/ # 公共文件存储 (持久化)
├── framework/ # Laravel框架缓存
├── logs/ # 日志文件 (映射到宿主机)
│ ├── app/ # 应用容器日志
│ ├── queue/ # 队列容器日志
│ └── laravel.log # Laravel应用日志
├── mysql/ # MySQL数据文件 (持久化)
├── redis/ # Redis数据文件 (持久化)
└── meilisearch/ # Meilisearch索引文件 (持久化)
```
## 验证结果
运行 `./docker/validate-storage-config.sh` 的验证结果:
- ✅ **54项检查全部通过**
- ✅ **0项失败**
- ✅ 所有存储目录结构正确
- ✅ 所有Docker Compose卷映射配置正确
- ✅ 所有服务容器卷映射正确
- ✅ 所有数据卷绑定配置正确
- ✅ 所有目录权限正确
- ✅ Docker Compose配置文件语法正确
- ✅ 所有目录写入权限正常
## 满足的需求
本实现完全满足以下需求:
- **需求 3.1**: ✅ 项目代码目录映射到容器内部
- **需求 3.2**: ✅ 上传文档存储目录持久化到宿主机
- **需求 3.3**: ✅ 数据库数据目录持久化到宿主机
- **需求 3.4**: ✅ 搜索引擎数据目录持久化到宿主机
- **需求 3.5**: ✅ 日志目录映射到宿主机便于查看
## 使用方法
### 初始化存储目录
```bash
./docker/init-storage.sh
```
### 验证配置
```bash
./docker/validate-storage-config.sh
```
### 测试持久化
```bash
./docker/test-persistence.sh
```
### 启动服务
```bash
docker-compose up -d
```
## 技术特点
1. **完整性**: 覆盖了所有需要持久化的数据类型
2. **可靠性**: 使用bind mount确保数据真正持久化
3. **可维护性**: 提供了完整的管理和验证脚本
4. **安全性**: 正确的目录权限设置
5. **可扩展性**: 易于添加新的存储需求
## 下一步
数据持久化和目录映射配置已完成,可以继续执行下一个任务:
- **任务4**: 配置环境变量和网络设置