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

4.2 KiB
Raw Blame History

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端口

故障排除

网络连接问题

  1. 检查容器网络状态:

    docker network ls
    docker network inspect knowledge_base_network
    
  2. 测试容器间连通性:

    docker exec knowledge_base_app ping mysql
    docker exec knowledge_base_app ping redis
    docker exec knowledge_base_app ping meilisearch
    
  3. 检查端口监听状态:

    docker exec knowledge_base_mysql netstat -tlnp
    docker exec knowledge_base_redis netstat -tlnp
    

常见问题

  1. 端口冲突: 确保外部端口没有被其他服务占用
  2. DNS解析失败: 检查容器是否在同一网络中
  3. 防火墙阻断: 检查宿主机防火墙设置

监控和日志

网络监控

# 查看网络流量
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内置压缩支持
    • 静态资源压缩

资源限制

# 在docker-compose.yml中配置资源限制
deploy:
  resources:
    limits:
      memory: 1G
      cpus: '0.5'
    reservations:
      memory: 512M
      cpus: '0.25'