# Laravel知识库系统 - 生产环境Docker部署指南 ## 概述 本指南介绍如何使用Docker在生产环境中部署Laravel知识库系统。系统包含以下组件: - **Web应用**: Laravel应用 + Swoole (端口8000) - **数据库**: MySQL 8.0 (端口3306) - **缓存**: Redis 7 (端口6379) - **搜索**: Meilisearch v1.5 (端口7700) - **队列**: Laravel队列处理器 ## 系统要求 - Docker Engine 20.10+ - Docker Compose 2.0+ - 至少4GB可用内存 - 至少10GB可用磁盘空间 ## 快速开始 ### 1. 环境配置 ```bash # 复制环境配置文件 cp .env.production .env # 编辑环境配置(重要!) nano .env ``` **必须修改的配置项:** - `APP_KEY`: 运行 `php artisan key:generate` 生成 - `DB_PASSWORD`: 设置强密码 - `MEILISEARCH_KEY`: 设置搜索引擎主密钥 - `APP_URL`: 设置实际域名 ### 2. 启动服务 ```bash # 使用启动脚本(推荐) ./docker/start-production.sh # 或手动启动 docker-compose up -d ``` ### 3. 验证部署 ```bash # 检查服务状态 ./docker/check-services.sh # 访问应用 curl http://localhost/health ``` ## 服务配置详情 ### MySQL数据库 - **镜像**: mysql:8.0 - **端口**: 3306 - **数据持久化**: `./storage/mysql` - **配置文件**: `./docker/mysql/my.cnf` - **字符集**: utf8mb4 ### Redis缓存 - **镜像**: redis:7-alpine - **端口**: 6379 - **数据持久化**: `./storage/redis` - **配置文件**: `./docker/redis/redis.conf` - **内存限制**: 512MB ### Meilisearch搜索 - **镜像**: getmeili/meilisearch:v1.5 - **端口**: 7700 - **数据持久化**: `./storage/meilisearch` - **内存限制**: 1GB ### Laravel应用 - **基础镜像**: php:8.2-cli-alpine - **Web服务器**: Swoole (通过 Laravel Octane) - **端口**: 8000 - **PHP扩展**: pdo_mysql, redis, gd, zip, intl等 - **文档转换**: Pandoc ### 队列处理器 - **功能**: 处理文档转换等后台任务 - **命令**: `php artisan queue:work` - **重试次数**: 3次 - **超时时间**: 90秒 ## 数据持久化 所有重要数据都持久化到宿主机: ``` storage/ ├── mysql/ # MySQL数据文件 ├── redis/ # Redis数据文件 ├── meilisearch/ # 搜索引擎数据 ├── app/ # 应用上传文件 └── logs/ # 应用日志 ├── app/ # Web应用日志 └── queue/ # 队列处理日志 ``` ## 健康检查 系统包含完整的健康检查机制: - **Web应用**: HTTP检查 `/health` 端点 - **MySQL**: 数据库连接检查 - **Redis**: Redis ping检查 - **Meilisearch**: API健康检查 ## 管理命令 ### 启动和停止 ```bash # 启动所有服务 ./docker/start-production.sh # 停止所有服务 ./docker/stop-production.sh # 重启特定服务 docker-compose restart app ``` ### 监控和调试 ```bash # 检查服务状态 ./docker/check-services.sh # 查看日志 docker-compose logs -f app docker-compose logs -f mysql docker-compose logs -f queue # 进入容器 docker-compose exec app bash docker-compose exec mysql mysql -u root -p ``` ### Laravel管理 ```bash # 运行Artisan命令 docker-compose exec app php artisan migrate docker-compose exec app php artisan queue:work docker-compose exec app php artisan cache:clear # 查看队列状态 docker-compose exec app php artisan queue:monitor ``` ## 性能优化 ### 资源限制 - **应用容器**: 1GB内存限制 - **队列容器**: 512MB内存限制 - **Redis**: 512MB内存限制 - **Meilisearch**: 1GB内存限制 ### 缓存配置 - **OPcache**: 已启用PHP操作码缓存 - **Laravel缓存**: 使用Redis存储 - **配置缓存**: 生产环境已启用 ## 安全配置 ### 网络安全 - 使用专用Docker网络 - 仅暴露必要端口 - 容器间通信使用内部网络 ### 数据安全 - 数据库密码保护 - Redis可选密码保护 - Meilisearch主密钥保护 ### 文件权限 - 应用文件使用www-data用户 - 存储目录适当权限设置 ## 故障排除 ### 常见问题 1. **容器启动失败** ```bash # 查看详细日志 docker-compose logs [service_name] # 检查配置 docker-compose config ``` 2. **数据库连接失败** ```bash # 检查MySQL状态 docker-compose exec mysql mysqladmin ping # 检查环境变量 docker-compose exec app env | grep DB_ ``` 3. **权限问题** ```bash # 修复存储权限 docker-compose exec app chown -R www-data:www-data /var/www/html/storage ``` 4. **内存不足** ```bash # 检查资源使用 docker stats # 调整内存限制(docker-compose.yml) ``` ### 日志位置 - **应用日志**: `storage/logs/app/` - **队列日志**: `storage/logs/queue/` - **MySQL日志**: 容器内 `/var/log/mysql/` - **Swoole日志**: 容器内 `/var/log/supervisor/` ## 备份和恢复 ### 数据备份 ```bash # 备份MySQL数据 docker-compose exec mysql mysqldump -u root -p knowledge_base > backup.sql # 备份上传文件 tar -czf storage-backup.tar.gz storage/app/ # 备份搜索数据 tar -czf meilisearch-backup.tar.gz storage/meilisearch/ ``` ### 数据恢复 ```bash # 恢复MySQL数据 docker-compose exec -T mysql mysql -u root -p knowledge_base < backup.sql # 恢复上传文件 tar -xzf storage-backup.tar.gz ``` ## 更新和维护 ### 应用更新 ```bash # 拉取最新代码 git pull # 重新构建镜像 docker-compose build --no-cache app # 重启服务 docker-compose up -d # 运行迁移 docker-compose exec app php artisan migrate ``` ### 系统维护 ```bash # 清理日志 docker-compose exec app php artisan log:clear # 清理缓存 docker-compose exec app php artisan cache:clear docker-compose exec app php artisan config:cache # 优化数据库 docker-compose exec mysql mysqlcheck -u root -p --optimize --all-databases ``` ## 支持 如遇到问题,请检查: 1. Docker和Docker Compose版本 2. 系统资源使用情况 3. 环境变量配置 4. 网络连接状态 5. 日志文件内容