【公共环境】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 堆 | 说明 |
|---|---|---|---|---|
| Redis | 1GB | — | — | deploy.resources.limits.memory: 1G;Redis 自身 maxmemory 900mb,预留 100MB 给容器开销 |
| MongoDB | 1GB | 1 核 | — | deploy.resources.limits.memory: 1G, cpus: '1.0';WiredTiger 缓存 wiredTigerCacheSizeGB: 0.5 |
| Nacos | — | — | 512m | JVM_XMS=512m, JVM_XMX=512m,堆内存固定 512m |
| Elasticsearch | — | — | 512m | ES_JAVA_OPTS=-Xms512m -Xmx512m,堆内存固定 512m |
| MySQL | — | — | — | 无显式限制,默认约 1.5–2GB |
| Sentinel | — | — | — | openjdk: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 端口清单
| 服务 | 主机端口 | 容器端口 | 用途 |
|---|---|---|---|
| MySQL | 33306 | 3306 | 数据库 |
| Redis | 36379 | 6379 | 缓存 |
| MongoDB | 27017 | 27017 | 文档数据库 |
| Sentinel | 38081 | 8080 | 限流控制台 |
| RocketMQ Dashboard | 38082 | 8082 | MQ 控制台 |
| Nacos | 38848 | 8848 | 注册/配置中心 |
| MinIO API | 39000 | 9000 | 对象存储 API |
| MinIO Console | 39001 | 9001 | 对象存储控制台 |
| Elasticsearch HTTP | 39200 | 9200 | 全局搜索 |
| Elasticsearch Transport | 39300 | 9300 | 集群通信 |
| XXL-Job Admin | 39092 | 8081 | 分布式任务调度 |
| RocketMQ Namesrv | 39876 | 9876 | MQ 名称服务 |
| Nacos gRPC | 39848 | 9848 | gRPC 通信 |
| RocketMQ Broker | 10909/10911 | 10909/10911 | MQ 消息通信 |
| n8n | 35678 | 5678 | 工作流平台 |
| Milvus gRPC | 19530 | 19530 | 向量数据库 |
| Milvus Metrics | 39091 | 9091 | 健康检查 & Metrics |
1.3 目录与文件准备
部署前需手动创建以下目录:
# 基础服务
$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 启动全部服务
$cd /path/to/project
$docker compose up -d
2.2 按依赖顺序启动
# 第一批:基础服务
$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 常用管理命令
$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:38081 | sentinel / qg-yyds-chat4j |
| RocketMQ 控制台 | http://43.138.184.148:38082 | admin / qg-yyds-chat4j |
| MinIO 控制台 | http://43.138.184.148:39001 | chat4j / qg-yyds-chat4j |
| n8n 工作流平台 | http://43.138.184.148:35678 | adminchat4j@163.com / qg-YYDS-chat4j |
| XXL-Job 控制台 | http://43.138.184.148:39092/xxl-job-admin | admin / qg-yyds-chat4j |
客户端连接类
| 服务 | 连接地址 | 账号 / 密码 | 说明 |
|---|---|---|---|
| MySQL | 43.138.184.148:33306 | root / qg-yyds-chat4j | 所有服务统一使用 root 账户连接 |
| Redis | 43.138.184.148:36379 | 认证已关闭 | 无密码直连 |
| MongoDB | 43.138.184.148:27017 | admin / qg-yyds-chat4j | 初始数据库:webchat |
| MinIO API | http://43.138.184.148:39000 | chat4j / qg-yyds-chat4j | S3 兼容接口 |
| Nacos 服务注册 | 43.138.184.148:38848 | nacos / nacos | Spring Cloud 应用配置此地址 |
| RocketMQ Namesrv | 43.138.184.148:39876 | 认证已关闭 | 生产者/消费者连接此地址 |
| Elasticsearch | http://43.138.184.148:39200 | 安全认证已关闭 | REST API 端点 |
| Milvus | 43.138.184.148:19530 | 认证已关闭 | gRPC 端口 |
3.2 各服务详细访问说明
MySQL
# 命令行连接
$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)连接
# 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
# 命令行连接(认证已关闭,无需密码)
$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(Redismaxmemory设为 900MB,预留 100MB 给容器开销)
# 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=512m、JVM_XMX=512m(堆内存固定 512m)
# 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)
# 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
# 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 变更需同步修改
# application.yml 配置示例
minio:
endpoint: http://43.138.184.148:39000
access-key: chat4j
secret-key: qg-yyds-chat4j
bucket-name: webchat
secure: false
MongoDB
# 命令行连接
$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
# application.yml 配置示例
spring:
data:
mongodb:
uri: mongodb://admin:qg-yyds-chat4j@43.138.184.148:27017/webchat?authSource=admin
auto-index-creation: true
Elasticsearch
# 健康检查(安全认证已关闭,无需密码)
$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=false,xpack.security.http.ssl.enabled=false,xpack.security.transport.ssl.enabled=false - 配置文件:
./elasticsearch8.14.3/config/elasticsearch.yml
# 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 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 凭证
# 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
首次部署需手动导入建表脚本:
$mysql -h 43.138.184.148 -P 33306 -u root -pqg-yyds-chat4j < ./sql/xxl-job/tables_xxl_job.sql
# 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
五、配置文件清单 #
所有配置文件使用相对路径,位于项目根目录下:
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 建表脚本
六、健康检查与验证 #
部署完成后,按以下步骤验证各服务可用性:
# 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
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}")
七、注意事项 #
- Sentinel JAR 包:必须提前将
sentinel-dashboard-1.8.9.jar放到./sentinel/sentinel-1.8.9/目录 - Redis 配置文件:
./redis7.4-alpine/conf/redis.conf已关闭密码认证(requirepass 已注释),高危命令已禁用(FLUSHDB、FLUSHALL、KEYS) - RocketMQ Broker 配置:
./rocketmq5.3.2/conf/broker.conf中brokerIP1=43.138.184.148,如 IP 变更需同步修改 - MinIO 外部访问:
MINIO_SERVER_URL已设置为http://43.138.184.148:39000,如 IP 变更需同步修改;注意用户名为chat4j非qg-yyds-chat4j - Nacos 控制台密码:默认 nacos/nacos,首次登录后请立即修改,当前已经关闭登录鉴权
- Nacos 命名空间:Sentinel 规则持久化使用命名空间
2cdfb8e3-f127-4020-93df-2d4c3dc805b5,需在 Nacos 控制台提前创建 - Elasticsearch:安全认证已关闭(
xpack.security.enabled=false),无需设置密码 - XXL-Job 首次部署:需手动将
./sql/xxl-job/tables_xxl_job.sql导入到 MySQL 的xxl_job库,已经将数据库导入到mysql中 - n8n 管理:使用sqlite做了持久化,具体需要进行测试才可以
- 时区:所有服务统一使用
Asia/Shanghai时区 - 资源限制(详见 资源限制汇总):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
- Milvus 启动较慢:健康检查设有 90s 启动等待期(
start_period: 90s),属正常现象