- 添加 Dockerfile 与多套 docker-compose 配置(开发/生产环境) - 集成 Laravel Octane (Swoole) 提升性能 - 新增健康检查、监控脚本及部署文档 - 新增 Docker 镜像离线导入包(MySQL/Redis/Meilisearch) - 优化文档转换、预览服务及队列任务 - 添加 CreateAdminUser 命令与路由健康检查接口 - 新增 Swoole 队列兼容性测试套件 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
3.5 KiB
3.5 KiB
数据持久化和目录映射配置说明
概述
本文档描述了Docker部署中的数据持久化和目录映射配置,确保容器重启后数据不丢失。
目录映射配置
1. 项目代码目录映射
volumes:
- ./:/var/www/html
- 用途: 将项目根目录映射到容器内的Web根目录
- 好处: 支持开发环境的代码热重载
- 注意: 生产环境建议使用镜像内置代码
2. 应用存储目录持久化
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. 数据库数据持久化
volumes:
- mysql_data:/var/lib/mysql
- 用途: MySQL数据库文件持久化
- 映射到:
./storage/mysql - 重要性: 确保数据库数据在容器重启后不丢失
4. 缓存数据持久化
volumes:
- redis_data:/data
- 用途: Redis缓存和会话数据持久化
- 映射到:
./storage/redis - 好处: 保持用户会话和缓存数据
5. 搜索引擎数据持久化
volumes:
- meilisearch_data:/meili_data
- 用途: Meilisearch搜索索引数据持久化
- 映射到:
./storage/meilisearch - 重要性: 避免重新构建搜索索引
6. 日志目录映射
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 脚本初始化存储目录:
./docker/init-storage.sh
该脚本会:
- 创建所有必要的存储目录
- 设置正确的权限
- 显示目录结构
备份建议
定期备份以下重要目录:
storage/mysql/- 数据库数据storage/app/private/documents/- 上传的文档storage/meilisearch/- 搜索索引storage/logs/- 应用日志
故障排除
权限问题
如果遇到权限错误,运行:
sudo chown -R $USER:$USER storage/
chmod -R 755 storage/
目录不存在
运行初始化脚本:
./docker/init-storage.sh
数据丢失
检查卷映射配置是否正确,确保使用bind mount而不是匿名卷。