- 添加 Dockerfile 与多套 docker-compose 配置(开发/生产环境) - 集成 Laravel Octane (Swoole) 提升性能 - 新增健康检查、监控脚本及部署文档 - 新增 Docker 镜像离线导入包(MySQL/Redis/Meilisearch) - 优化文档转换、预览服务及队列任务 - 添加 CreateAdminUser 命令与路由健康检查接口 - 新增 Swoole 队列兼容性测试套件 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
4.2 KiB
4.2 KiB
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
环境变量配置
生产环境
# 数据库连接
DB_HOST=mysql
DB_PORT=3306
# Redis连接
REDIS_HOST=redis
REDIS_PORT=6379
# Meilisearch连接
MEILISEARCH_HOST=http://meilisearch:7700
开发环境
# 数据库连接
DB_HOST=mysql
DB_PORT=3306
# Redis连接
REDIS_HOST=redis
REDIS_PORT=6379
# Meilisearch连接
MEILISEARCH_HOST=http://meilisearch:7700
注意:开发环境内部端口保持一致,只有外部映射端口不同。
网络安全
防火墙规则
生产环境建议配置防火墙规则:
# 只允许必要的端口访问
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端口
故障排除
网络连接问题
-
检查容器网络状态:
docker network ls docker network inspect knowledge_base_network -
测试容器间连通性:
docker exec knowledge_base_app ping mysql docker exec knowledge_base_app ping redis docker exec knowledge_base_app ping meilisearch -
检查端口监听状态:
docker exec knowledge_base_mysql netstat -tlnp docker exec knowledge_base_redis netstat -tlnp
常见问题
- 端口冲突: 确保外部端口没有被其他服务占用
- DNS解析失败: 检查容器是否在同一网络中
- 防火墙阻断: 检查宿主机防火墙设置
监控和日志
网络监控
# 查看网络流量
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
性能优化
网络性能调优
- 启用HTTP/2 (如果使用HTTPS)
- 配置连接池:
- MySQL连接池大小
- Redis连接池配置
- 启用压缩:
- Swoole内置压缩支持
- 静态资源压缩
资源限制
# 在docker-compose.yml中配置资源限制
deploy:
resources:
limits:
memory: 1G
cpus: '0.5'
reservations:
memory: 512M
cpus: '0.25'