# 数据持久化和目录映射配置说明 ## 概述 本文档描述了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而不是匿名卷。