【公共环境】WebChat 中间件集合服务Docker部署方案

服务器配置:4C16G

服务器 IP:43.138.184.148

账号密码:root、密码群内获取

编排文件:docker-compose.yml

部署根路径:/data/chat4j/ms-middleware/

特别鸣谢:感谢 ʷᵉⁿ先森 同学帮我们部署了一套公共服务

使用说明:对于本地内存压力较大的同学,可以直接使用以下环境启动项目,但是依然推荐大家优先自己部署

一、服务依赖与启动顺序 #

以下是各中间件服务的依赖关系与启动顺序,先启动依赖的服务再启动被依赖的服务:

服务依赖关系图

二、前置准备 #

1.1 主机要求

项目 要求
操作系统Linux(CentOS 7)
Docker≥ 20.10
Docker Compose≥ v2(docker compose 命令)
内存≥ 16GB(见下方资源限制汇总,显式限制 + JVM + 隐式占用合计约 12GB)
磁盘≥ 100GB(数据持久化 + 日志 + ES 索引数据)
端口放行见下方端口清单

资源限制汇总

服务 容器内存上限 CPU 上限 JVM 堆 说明
Redis1GBdeploy.resources.limits.memory: 1G;Redis 自身 maxmemory 900mb,预留 100MB 给容器开销
MongoDB1GB1 核deploy.resources.limits.memory: 1G, cpus: '1.0';WiredTiger 缓存 wiredTigerCacheSizeGB: 0.5
Nacos512mJVM_XMS=512m, JVM_XMX=512m,堆内存固定 512m
Elasticsearch512mES_JAVA_OPTS=-Xms512m -Xmx512m,堆内存固定 512m
MySQL无显式限制,默认约 1.5–2GB
Sentinelopenjdk:17 容器,默认约 256–512MB
RocketMQ Namesrv默认约 512MB
RocketMQ Broker默认约 1–1.5GB
RocketMQ Dashboard默认约 256–512MB
MinIO默认约 512MB–1GB
n8n默认约 256–512MB
Etcd默认约 128–256MB
Milvus默认约 1–2GB
XXL-Job默认约 256–512MB

1.2 端口清单

服务 主机端口 容器端口 用途
MySQL333063306数据库
Redis363796379缓存
MongoDB2701727017文档数据库
Sentinel380818080限流控制台
RocketMQ Dashboard380828082MQ 控制台
Nacos388488848注册/配置中心
MinIO API390009000对象存储 API
MinIO Console390019001对象存储控制台
Elasticsearch HTTP392009200全局搜索
Elasticsearch Transport393009300集群通信
XXL-Job Admin390928081分布式任务调度
RocketMQ Namesrv398769876MQ 名称服务
Nacos gRPC398489848gRPC 通信
RocketMQ Broker10909/1091110909/10911MQ 消息通信
n8n356785678工作流平台
Milvus gRPC1953019530向量数据库
Milvus Metrics390919091健康检查 & Metrics

1.3 目录与文件准备

部署前需手动创建以下目录:

BASH
# 基础服务
$mkdir -p mysql/data
$mkdir -p redis7.4-alpine/data redis7.4-alpine/conf
$mkdir -p nacos2.5.1/logs nacos2.5.1/data
$mkdir -p sentinel/sentinel-1.8.9
$mkdir -p rocketmq5.3.2/conf
$mkdir -p minio/latest/data
$mkdir -p mongodb/latest/data
$mkdir -p n8n/data

# Elasticsearch
$mkdir -p elasticsearch8.14.3/config elasticsearch8.14.3/data elasticsearch8.14.3/logs elasticsearch8.14.3/plugins

# Milvus + Etcd
$mkdir -p milvus/data milvus/etcd

# XXL-Job
$mkdir -p xxl-job/logs

需要手动放置的文件:

文件 放置路径 说明
sentinel-dashboard-1.8.9.jar./sentinel/sentinel-1.8.9/Sentinel 控制台 JAR 包
redis.conf./redis7.4-alpine/conf/Redis 配置文件(已内置)
broker.conf./rocketmq5.3.2/conf/RocketMQ Broker 配置(已内置)
elasticsearch.yml./elasticsearch8.14.3/config/ES 配置文件(已内置)
tables_xxl_job.sql./sql/xxl-job/XXL-Job 建表脚本(已经导入)

三、服务启动 #

2.1 启动全部服务

TERMINAL
$cd /path/to/project
$docker compose up -d

2.2 按依赖顺序启动

TERMINAL
# 第一批:基础服务
$docker compose up -d mysql redis rmqnamesrv mongodb minio elasticsearch

# 第二批:等基础服务健康后
$docker compose up -d nacos rmqbroker etcd

# 第三批:等 Nacos / Broker / Etcd 就绪后
$docker compose up -d sentinel rocketmq-dashboard milvus xxl-job-admin n8n

2.3 常用管理命令

TERMINAL
$docker compose ps                    # 查看所有服务状态
$docker compose logs -f <服务名>       # 实时查看日志
$docker compose restart <服务名>       # 重启单个服务
$docker compose down                  # 停止并移除所有容器
$docker compose down -v               # 停止并移除容器+网络

四、服务访问方案 #

3.1 访问地址总览

Web 控制台类

服务 访问地址 账号 / 密码
Nacos 控制台http://43.138.184.148:38848/nacos鉴权已关闭,直接访问
Sentinel 限流控制台http://43.138.184.148:38081sentinel / qg-yyds-chat4j
RocketMQ 控制台http://43.138.184.148:38082admin / qg-yyds-chat4j
MinIO 控制台http://43.138.184.148:39001chat4j / qg-yyds-chat4j
n8n 工作流平台http://43.138.184.148:35678adminchat4j@163.com / qg-YYDS-chat4j
XXL-Job 控制台http://43.138.184.148:39092/xxl-job-adminadmin / qg-yyds-chat4j

客户端连接类

服务 连接地址 账号 / 密码 说明
MySQL43.138.184.148:33306root / qg-yyds-chat4j所有服务统一使用 root 账户连接
Redis43.138.184.148:36379认证已关闭无密码直连
MongoDB43.138.184.148:27017admin / qg-yyds-chat4j初始数据库:webchat
MinIO APIhttp://43.138.184.148:39000chat4j / qg-yyds-chat4jS3 兼容接口
Nacos 服务注册43.138.184.148:38848nacos / nacosSpring Cloud 应用配置此地址
RocketMQ Namesrv43.138.184.148:39876认证已关闭生产者/消费者连接此地址
Elasticsearchhttp://43.138.184.148:39200安全认证已关闭REST API 端点
Milvus43.138.184.148:19530认证已关闭gRPC 端口

3.2 各服务详细访问说明

MySQL

TERMINAL
# 命令行连接
$mysql -h 43.138.184.148 -P 33306 -u root -pqg-yyds-chat4j

# 客户端工具
$Host: 43.138.184.148
$Port: 33306
$Username: root
$Password: qg-yyds-chat4j

内置数据库:

  • nacos — Nacos 配置中心专用库(容器初始化时自动创建)
  • xxl_job — XXL-Job 任务调度专用库(需手动导入建表脚本)
  • 其他业务库由应用自行创建
  • 所有服务统一使用 root 账户(root / qg-yyds-chat4j)连接
YAML
# application.yml 配置示例
spring:
  datasource:
    url: jdbc:mysql://43.138.184.148:33306/your_database?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
    username: root
    password: qg-yyds-chat4j
    driver-class-name: com.mysql.cj.jdbc.Driver

Redis

TERMINAL
# 命令行连接(认证已关闭,无需密码)
$redis-cli -h 43.138.184.148 -p 36379

配置要点:

  • 持久化:AOF(appendonly yes, appendfsync everysec
  • 最大内存:900MB,淘汰策略 allkeys-lru
  • 安全:禁用 FLUSHDB、FLUSHALL、KEYS 命令
  • 资源限制deploy.resources.limits.memory: 1G(Redis maxmemory 设为 900MB,预留 100MB 给容器开销)
YAML
# application.yml 配置示例
spring:
  data:
    redis:
      host: 43.138.184.148
      port: 36379
      # 认证已关闭,无需配置 password
      database: 0
      timeout: 3000ms
      lettuce:
        pool:
          max-active: 8
          max-idle: 8
          min-idle: 0

Nacos

控制台:http://43.138.184.148:38848/nacos

配置要点:

  • Nacos 版本:v2.5.1
  • 已关闭鉴权(NACOS_AUTH_ENABLE=false
  • 使用 MySQL 持久化(非内嵌 Derby)
  • 命名空间 ID:2cdfb8e3-f127-4020-93df-2d4c3dc805b5
  • 默认控制台账号:nacos / nacos(鉴权已关闭,无需密码即可访问)
  • JVM 配置:JVM_XMS=512mJVM_XMX=512m(堆内存固定 512m)
YAML
# application.yml 配置示例
spring:
  cloud:
    nacos:
      discovery:
        server-addr: 43.138.184.148:38848
        namespace: 2cdfb8e3-f127-4020-93df-2d4c3dc805b5
        # username: nacos
        # password: nacos
      config:
        server-addr: 43.138.184.148:38848
        namespace: 2cdfb8e3-f127-4020-93df-2d4c3dc805b5
        # username: nacos
        # password: nacos
        file-extension: yml
        shared-configs:
          - data-id: common.yml
            refresh: true

Sentinel

控制台:http://43.138.184.148:38081
账号:sentinel / qg-yyds-chat4j

配置要点:

  • 底层镜像:openjdk:17-jdk,运行 sentinel-dashboard-1.8.9.jar
  • 已对接 Nacos 实现规则持久化,命名空间 2cdfb8e3-f127-4020-93df-2d4c3dc805b5
  • JAR 包路径:./sentinel/sentinel-1.8.9/sentinel-dashboard-1.8.9.jar
  • Sentinel 端口:8080(映射到主机 38081)
YAML
# application.yml 配置示例
spring:
  cloud:
    sentinel:
      transport:
        dashboard: 43.138.184.148:38081
        port: 8719
      # Nacos 规则持久化
      datasource:
        flow:
          nacos:
            server-addr: 43.138.184.148:38848
            namespace: 2cdfb8e3-f127-4020-93df-2d4c3dc805b5
            data-id: ${spring.application.name}-flow-rules
            rule-type: flow
        degrade:
          nacos:
            server-addr: 43.138.184.148:38848
            namespace: 2cdfb8e3-f127-4020-93df-2d4c3dc805b5
            data-id: ${spring.application.name}-degrade-rules
            rule-type: degrade

RocketMQ

控制台:http://43.138.184.148:38082 可查看 Topic、消费者组、消息轨迹等。

配置要点:

  • RocketMQ 版本:5.3.2
  • Broker 角色:SYNC_MASTER,同步双写
  • Broker IP:brokerIP1=43.138.184.148(如 IP 变更需同步修改)
  • 刷盘策略:SYNC_FLUSH
  • 消息轨迹:已启用(traceTopicEnable=true
  • 自动创建 Topic / 订阅组:已关闭
  • 认证/授权:均已关闭
  • Dashboard 凭证:accessKey=admin, secretKey=qg-yyds-chat4j
YAML
# application.yml 配置示例
rocketmq:
  name-server: 43.138.184.148:39876
  # 认证已关闭,无需配置 access-key / secret-key
  producer:
    group: webchat-producer-group
    send-message-timeout: 3000
    retry-times-when-send-failed: 2
  consumer:
    group: webchat-consumer-group

MinIO

API 端点:http://43.138.184.148:39000
控制台:http://43.138.184.148:39001

配置要点:

  • 用户名:chat4j(非默认 root 格式)
  • MINIO_SERVER_URL 已设置为 http://43.138.184.148:39000,如 IP 变更需同步修改
YAML
# application.yml 配置示例
minio:
  endpoint: http://43.138.184.148:39000
  access-key: chat4j
  secret-key: qg-yyds-chat4j
  bucket-name: webchat
  secure: false

MongoDB

TERMINAL
# 命令行连接
$mongosh "mongodb://admin:qg-yyds-chat4j@43.138.184.148:27017"

# 连接字符串
$mongodb://admin:qg-yyds-chat4j@43.138.184.148:27017/webchat?authSource=admin

配置要点:

  • WiredTiger 缓存:wiredTigerCacheSizeGB=0.5(512MB)
  • 资源限制deploy.resources.limits.memory: 1G, cpus: '1.0'(内存上限 1GB,CPU 上限 1 核)
  • 初始数据库:webchat
YAML
# application.yml 配置示例
spring:
  data:
    mongodb:
      uri: mongodb://admin:qg-yyds-chat4j@43.138.184.148:27017/webchat?authSource=admin
      auto-index-creation: true

Elasticsearch

TERMINAL
# 健康检查(安全认证已关闭,无需密码)
$curl http://43.138.184.148:39200/_cluster/health?pretty

配置要点:

  • Elasticsearch 版本:8.14.3
  • 部署模式:single-node
  • JVM 配置:ES_JAVA_OPTS=-Xms512m -Xmx512m(堆内存固定 512m)
  • 集群名:docker-cluster-webchat,节点名:node-1
  • 安全特性已关闭:xpack.security.enabled=falsexpack.security.http.ssl.enabled=falsexpack.security.transport.ssl.enabled=false
  • 配置文件:./elasticsearch8.14.3/config/elasticsearch.yml
YAML
# application.yml 配置示例
spring:
  elasticsearch:
    uris: http://43.138.184.148:39200
    # 安全认证已关闭,无需配置 username / password
    connection-timeout: 5s
    socket-timeout: 30s

n8n

访问地址:http://43.138.184.148:35678
管理员邮箱:adminchat4j@163.com
管理员密码:qg-YYDS-chat4j

配置要点:

  • 使用 SQLite 持久化(默认模式,数据存储在 ./n8n/data 目录)
  • 加密密钥:Chat4jN8n2026SecureKeyYYDS78542941
  • 自动创建管理员账户(首次启动时自动完成)
  • 数据目录:./n8n/data
  • n8n 为独立工作流平台,通过 Docker 环境变量配置,不使用 application.yml

Etcd(Milvus 元数据存储)

配置要点:

  • 镜像:quay.io/coreos/etcd:v3.5.25
  • 容器名:webchat-milvus-etcd
  • 无外部端口映射(仅容器内网络通信)
  • 数据目录:./milvus/etcd
  • 自动压缩:revision 模式,保留 1000 条
  • 后端配额:4GB
  • 健康检查:etcdctl endpoint health(30s 间隔)
  • Etcd 为 Milvus 内部依赖,应用不直接连接,无需 application.yml 配置

Milvus 向量数据库(暂时有些问题)

PYTHON
# Python SDK 连接示例
from pymilvus import connections
connections.connect(
    alias="default",
    host="43.138.184.148",
    port="19530"
)

配置要点:

  • 镜像:milvusdb/milvus:v2.6.15
  • 容器名:webchat-milvus
  • 部署模式:Standalone
  • 端口:19530(gRPC)、39091(健康检查 & Metrics)
  • 数据目录:./milvus/data
  • 依赖:Etcd(元数据)、MinIO(对象存储)
  • 消息队列:woodpecker(内置)
  • 健康检查:curl http://localhost:9091/healthz(启动等待 90s)
  • 连接 MinIO 使用 chat4j / qg-yyds-chat4j 凭证
YAML
# application.yml 配置示例(Spring Boot + Milvus Java SDK)
milvus:
  host: 43.138.184.148
  port: 19530
  # 认证已关闭,无需配置 token

XXL-Job 分布式任务调度平台

控制台:http://43.138.184.148:39092/xxl-job-admin
账号:admin / qg-yyds-chat4j

配置要点:

  • 镜像:xuxueli/xxl-job-admin:2.4.2
  • 容器名:webchat-xxl-job-admin
  • 内部端口:8081(映射到主机 39092)
  • 数据库:MySQL xxl_job 库(需提前导入建表脚本)
  • 建表脚本:./sql/xxl-job/tables_xxl_job.sql
  • 日志目录:./xxl-job/logs
  • accessToken:qg-yyds-chat4j
  • 依赖:MySQL

首次部署需手动导入建表脚本:

TERMINAL
$mysql -h 43.138.184.148 -P 33306 -u root -pqg-yyds-chat4j < ./sql/xxl-job/tables_xxl_job.sql
YAML
# application.yml 配置示例
xxl:
  job:
    admin:
      addresses: http://43.138.184.148:39092/xxl-job-admin
    accessToken: qg-yyds-chat4j
    executor:
      appname: webchat-executor
      address:
      ip:
      port: 9999
      logpath: /data/applogs/xxl-job/jobhandler
      logretentiondays: 30

五、配置文件清单 #

所有配置文件使用相对路径,位于项目根目录下:

STRUCTURE
prod_new/
├── docker-compose.yml                          # 主编排文件
├── WebChat中间件集合服务部署方案.md              # 本文档
│
├── mysql/
│   └── data/                                   # MySQL 数据目录
│
├── redis7.4-alpine/
│   ├── data/                                   # Redis 数据目录
│   └── conf/
│       └── redis.conf                          # Redis 配置(认证已关闭、AOF 持久化)
│
├── nacos2.5.1/
│   ├── logs/                                   # Nacos 日志
│   └── data/                                   # Nacos 数据
│
├── sentinel/
│   └── sentinel-1.8.9/
│       └── sentinel-dashboard-1.8.9.jar        # Sentinel JAR(需手动放置)
│
├── rocketmq5.3.2/
│   └── conf/
│       └── broker.conf                         # Broker 配置(认证已关闭)
│
├── minio/
│   └── latest/
│       └── data/                               # MinIO 数据目录
│
├── mongodb/
│   └── latest/
│       └── data/                               # MongoDB 数据目录
│
├── elasticsearch8.14.3/
│   ├── config/
│   │   └── elasticsearch.yml                   # ES 配置(安全认证已关闭)
│   ├── data/                                   # ES 数据
│   ├── logs/                                   # ES 日志
│   └── plugins/                                # ES 插件
│
├── n8n/
│   └── data/                                   # n8n 数据
│
├── milvus/
│   ├── data/                                   # Milvus 向量数据
│   └── etcd/                                   # Etcd 元数据
│
├── xxl-job/
│   └── logs/                                   # XXL-Job 日志
│
└── sql/
    ├── nacos2.5.1/
    │   └── mysql-schema.sql                    # Nacos 建表脚本
    └── xxl-job/
        └── tables_xxl_job.sql                  # XXL-Job 建表脚本

六、健康检查与验证 #

部署完成后,按以下步骤验证各服务可用性:

TERMINAL
# 1. 检查所有容器运行状态
$docker compose ps

# 2. MySQL 连通性
$docker compose exec mysql mysqladmin ping -h localhost -u root -pqg-yyds-chat4j

# 3. Redis 连通性(认证已关闭)
$docker compose exec redis redis-cli ping

# 4. MongoDB 连通性
$docker compose exec mongodb mongosh --eval "db.adminCommand('ping')" -u admin -p 'qg-yyds-chat4j'

# 5. MinIO 健康检查
$curl -f http://43.138.184.148:39000/minio/health/live

# 6. Nacos 控制台
$curl http://43.138.184.148:38848/nacos/

# 7. Sentinel 控制台
$curl http://43.138.184.148:38081/

# 8. Elasticsearch 健康检查
$curl http://43.138.184.148:39200/_cluster/health?pretty

# 9. Milvus 健康检查
$curl http://43.138.184.148:39091/healthz

9.1 Milvus Python SDK 连接验证

需安装 pymilvus:pip install pymilvus,将以下脚本保存为 test_milvus.py 并执行:python test_milvus.py

PYTHON
from pymilvus import MilvusClient
import time


def connect_to_milvus():
    max_retries = 10
    retry_delay = 5

    for attempt in range(max_retries):
        try:
            # 新版官方推荐写法
            client = MilvusClient(
                uri="http://43.138.184.148:19530",  # 直接拼接 host:port
                timeout=30
            )

            # 检查版本
            version = client.get_server_version()
            print(f"Milvus 连接成功!版本: {version}")
            return client

        except Exception as e:
            print(f"连接尝试 {attempt + 1} 失败: {e}")

            if "not ready" in str(e).lower():
                print(f"Milvus 启动中,{retry_delay}秒后重试...")
                time.sleep(retry_delay)
            else:
                break

    print("无法连接到 Milvus,请检查服务")
    return None


# 执行连接
client = connect_to_milvus()
if client:
    try:
        # 新版获取集合列表
        cols = client.list_collections()
        print(f"现有集合: {cols}")
        print("\nMilvus 正常可用!")
    except Exception as e:
        print(f"操作失败: {e}")

七、注意事项 #

  1. Sentinel JAR 包:必须提前将 sentinel-dashboard-1.8.9.jar 放到 ./sentinel/sentinel-1.8.9/ 目录
  2. Redis 配置文件:./redis7.4-alpine/conf/redis.conf 已关闭密码认证(requirepass 已注释),高危命令已禁用(FLUSHDB、FLUSHALL、KEYS)
  3. RocketMQ Broker 配置:./rocketmq5.3.2/conf/broker.confbrokerIP1=43.138.184.148,如 IP 变更需同步修改
  4. MinIO 外部访问:MINIO_SERVER_URL 已设置为 http://43.138.184.148:39000,如 IP 变更需同步修改;注意用户名为 chat4jqg-yyds-chat4j
  5. Nacos 控制台密码:默认 nacos/nacos,首次登录后请立即修改,当前已经关闭登录鉴权
  6. Nacos 命名空间:Sentinel 规则持久化使用命名空间 2cdfb8e3-f127-4020-93df-2d4c3dc805b5,需在 Nacos 控制台提前创建
  7. Elasticsearch:安全认证已关闭(xpack.security.enabled=false),无需设置密码
  8. XXL-Job 首次部署:需手动将 ./sql/xxl-job/tables_xxl_job.sql 导入到 MySQL 的 xxl_job 库,已经将数据库导入到mysql中
  9. n8n 管理:使用sqlite做了持久化,具体需要进行测试才可以
  10. 时区:所有服务统一使用 Asia/Shanghai 时区
  11. 资源限制(详见 资源限制汇总):Redis 容器内存上限 1GB(Redis maxmemory 900MB)、MongoDB 容器内存上限 1GB + CPU 上限 1 核(WiredTiger 缓存 0.5GB)、Nacos JVM 堆 512m(XMS=XMX=512m)、ES JVM 堆 512m(Xms=Xmx=512m),请确保主机内存 ≥ 16GB
  12. Milvus 启动较慢:健康检查设有 90s 启动等待期(start_period: 90s),属正常现象