Files
KnowledgeBase/docker/README-production.md
lizhuoran 3c206e9e06 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>
2026-02-28 15:51:19 +08:00

288 lines
5.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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. 日志文件内容