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:
2026-02-28 15:51:19 +08:00
parent acf549c43c
commit 3c206e9e06
90 changed files with 12731 additions and 1255 deletions

View File

@@ -0,0 +1,179 @@
# Docker网络配置文档
## 概述
本文档描述了知识库系统Docker部署的网络配置包括生产环境和开发环境的网络设置。
## 网络架构
### 生产环境网络
- **网络名称**: `knowledge_base_network`
- **网络类型**: bridge
- **子网**: 172.20.0.0/16
- **网关**: 172.20.0.1
#### 服务端口映射
| 服务 | 容器名称 | 内部端口 | 外部端口 | 协议 |
|------|----------|----------|----------|------|
| Web应用 | knowledge_base_app | 80 | 80 | HTTP |
| MySQL | knowledge_base_mysql | 3306 | 3306 | MySQL |
| Redis | knowledge_base_redis | 6379 | 6379 | Redis |
| Meilisearch | knowledge_base_meilisearch | 7700 | 7700 | HTTP |
### 开发环境网络
- **网络名称**: `knowledge_base_dev_network`
- **网络类型**: bridge
- **子网**: 172.21.0.0/16
- **网关**: 172.21.0.1
#### 开发环境端口映射
| 服务 | 容器名称 | 内部端口 | 外部端口 | 协议 | 说明 |
|------|----------|----------|----------|------|------|
| Web应用 | knowledge_base_app_dev | 80 | 8080 | HTTP | 避免与生产环境冲突 |
| PHP-FPM调试 | knowledge_base_app_dev | 9000 | 9000 | TCP | Xdebug调试端口 |
| MySQL | knowledge_base_mysql_dev | 3306 | 3307 | MySQL | 避免与本地MySQL冲突 |
| Redis | knowledge_base_redis_dev | 6379 | 6380 | Redis | 避免与本地Redis冲突 |
| Meilisearch | knowledge_base_meilisearch_dev | 7700 | 7701 | HTTP | 避免与生产环境冲突 |
## 服务间通信
### 内部服务发现
所有容器通过Docker内部DNS进行服务发现使用容器名称作为主机名
- **数据库连接**: `mysql:3306`
- **Redis连接**: `redis:6379`
- **Meilisearch连接**: `http://meilisearch:7700`
### 环境变量配置
#### 生产环境
```bash
# 数据库连接
DB_HOST=mysql
DB_PORT=3306
# Redis连接
REDIS_HOST=redis
REDIS_PORT=6379
# Meilisearch连接
MEILISEARCH_HOST=http://meilisearch:7700
```
#### 开发环境
```bash
# 数据库连接
DB_HOST=mysql
DB_PORT=3306
# Redis连接
REDIS_HOST=redis
REDIS_PORT=6379
# Meilisearch连接
MEILISEARCH_HOST=http://meilisearch:7700
```
注意:开发环境内部端口保持一致,只有外部映射端口不同。
## 网络安全
### 防火墙规则
生产环境建议配置防火墙规则:
```bash
# 只允许必要的端口访问
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS (如果使用SSL)
sudo ufw deny 3306/tcp # 禁止外部直接访问MySQL
sudo ufw deny 6379/tcp # 禁止外部直接访问Redis
sudo ufw deny 7700/tcp # 禁止外部直接访问Meilisearch
```
### 容器间通信安全
- 所有服务运行在隔离的Docker网络中
- 数据库、缓存和搜索服务不直接暴露给外部网络
- 只有Web应用容器暴露HTTP端口
## 故障排除
### 网络连接问题
1. **检查容器网络状态**:
```bash
docker network ls
docker network inspect knowledge_base_network
```
2. **测试容器间连通性**:
```bash
docker exec knowledge_base_app ping mysql
docker exec knowledge_base_app ping redis
docker exec knowledge_base_app ping meilisearch
```
3. **检查端口监听状态**:
```bash
docker exec knowledge_base_mysql netstat -tlnp
docker exec knowledge_base_redis netstat -tlnp
```
### 常见问题
1. **端口冲突**: 确保外部端口没有被其他服务占用
2. **DNS解析失败**: 检查容器是否在同一网络中
3. **防火墙阻断**: 检查宿主机防火墙设置
## 监控和日志
### 网络监控
```bash
# 查看网络流量
docker exec knowledge_base_app ss -tuln
# 监控连接状态
docker exec knowledge_base_app netstat -an | grep ESTABLISHED
```
### 连接日志
应用连接日志位置:
- Laravel日志: `/var/www/html/storage/logs/laravel.log`
- Swoole访问日志: `/var/log/supervisor/swoole_stdout.log`
- Swoole错误日志: `/var/log/supervisor/swoole_stderr.log`
## 性能优化
### 网络性能调优
1. **启用HTTP/2** (如果使用HTTPS)
2. **配置连接池**:
- MySQL连接池大小
- Redis连接池配置
3. **启用压缩**:
- Swoole内置压缩支持
- 静态资源压缩
### 资源限制
```yaml
# 在docker-compose.yml中配置资源限制
deploy:
resources:
limits:
memory: 1G
cpus: '0.5'
reservations:
memory: 512M
cpus: '0.25'
```