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:
135
docker/STORAGE_CONFIGURATION.md
Normal file
135
docker/STORAGE_CONFIGURATION.md
Normal 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而不是匿名卷。
|
||||
Reference in New Issue
Block a user