- 添加 Dockerfile 与多套 docker-compose 配置(开发/生产环境) - 集成 Laravel Octane (Swoole) 提升性能 - 新增健康检查、监控脚本及部署文档 - 新增 Docker 镜像离线导入包(MySQL/Redis/Meilisearch) - 优化文档转换、预览服务及队列任务 - 添加 CreateAdminUser 命令与路由健康检查接口 - 新增 Swoole 队列兼容性测试套件 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
135 lines
3.5 KiB
Markdown
135 lines
3.5 KiB
Markdown
# 数据持久化和目录映射配置说明
|
||
|
||
## 概述
|
||
|
||
本文档描述了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而不是匿名卷。 |