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:
288
docker/README-production.md
Normal file
288
docker/README-production.md
Normal file
@@ -0,0 +1,288 @@
|
||||
# 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. 日志文件内容
|
||||
Reference in New Issue
Block a user