# 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' ```