Files
KnowledgeBase/docker/NETWORK_CONFIGURATION.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

179 lines
4.2 KiB
Markdown
Raw 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.
# 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'
```