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,135 @@
# 数据持久化和目录映射配置说明
## 概述
本文档描述了Docker部署中的数据持久化和目录映射配置确保容器重启后数据不丢失。
## 目录映射配置
### 1. 项目代码目录映射
```yaml
volumes:
- ./:/var/www/html
```
- **用途**: 将项目根目录映射到容器内的Web根目录
- **好处**: 支持开发环境的代码热重载
- **注意**: 生产环境建议使用镜像内置代码
### 2. 应用存储目录持久化
```yaml
volumes:
- storage_data:/var/www/html/storage
- documents_data:/var/www/html/storage/app/private/documents
- public_data:/var/www/html/storage/app/public
```
- **storage_data**: Laravel应用的主存储目录
- **documents_data**: 上传文档的私有存储目录
- **public_data**: 公共文件存储目录
### 3. 数据库数据持久化
```yaml
volumes:
- mysql_data:/var/lib/mysql
```
- **用途**: MySQL数据库文件持久化
- **映射到**: `./storage/mysql`
- **重要性**: 确保数据库数据在容器重启后不丢失
### 4. 缓存数据持久化
```yaml
volumes:
- redis_data:/data
```
- **用途**: Redis缓存和会话数据持久化
- **映射到**: `./storage/redis`
- **好处**: 保持用户会话和缓存数据
### 5. 搜索引擎数据持久化
```yaml
volumes:
- meilisearch_data:/meili_data
```
- **用途**: Meilisearch搜索索引数据持久化
- **映射到**: `./storage/meilisearch`
- **重要性**: 避免重新构建搜索索引
### 6. 日志目录映射
```yaml
volumes:
- app_logs:/var/log
- queue_logs:/var/log
- laravel_logs:/var/www/html/storage/logs
```
- **app_logs**: 应用容器系统日志
- **queue_logs**: 队列容器系统日志
- **laravel_logs**: Laravel应用日志
- **映射到**: `./storage/logs/` 相应子目录
## 存储目录结构
```
storage/
├── app/ # Laravel应用存储
│ ├── private/
│ │ ├── documents/ # 上传文档存储
│ │ └── markdown/ # Markdown文件存储
│ └── public/ # 公共文件存储
├── framework/ # Laravel框架缓存
│ ├── cache/
│ ├── sessions/
│ ├── testing/
│ └── views/
├── logs/ # 日志文件
│ ├── app/ # 应用容器日志
│ ├── queue/ # 队列容器日志
│ └── laravel.log # Laravel应用日志
├── mysql/ # MySQL数据文件
├── redis/ # Redis数据文件
└── meilisearch/ # Meilisearch索引文件
```
## 权限配置
所有存储目录都设置为755权限确保
- 容器内的应用可以读写数据
- 宿主机可以访问和备份数据
- 安全性和可用性的平衡
## 初始化脚本
使用 `docker/init-storage.sh` 脚本初始化存储目录:
```bash
./docker/init-storage.sh
```
该脚本会:
1. 创建所有必要的存储目录
2. 设置正确的权限
3. 显示目录结构
## 备份建议
定期备份以下重要目录:
- `storage/mysql/` - 数据库数据
- `storage/app/private/documents/` - 上传的文档
- `storage/meilisearch/` - 搜索索引
- `storage/logs/` - 应用日志
## 故障排除
### 权限问题
如果遇到权限错误,运行:
```bash
sudo chown -R $USER:$USER storage/
chmod -R 755 storage/
```
### 目录不存在
运行初始化脚本:
```bash
./docker/init-storage.sh
```
### 数据丢失
检查卷映射配置是否正确确保使用bind mount而不是匿名卷。