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:
179
docker/NETWORK_CONFIGURATION.md
Normal file
179
docker/NETWORK_CONFIGURATION.md
Normal 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'
|
||||
```
|
||||
Reference in New Issue
Block a user