一、autoTest 测试环境
Ubuntu 24.04.3
192.168.200.151 testing-middleware 2C16G400G
192.168.200.152 testing-application 2C4G300G
【注:数据持久化目录 /opt/Hjdata/,据将全部写入宿主 /opt/Hjdata/ 目录,容器重启或升级后数据不丢失】
每个中间件单独创建子目录
/opt/Hjdata/mysql
/opt/Hjdata/minIO
/opt/Hjdata/redis
/opt/Hjdata/rmq
/opt/Hjdata/mongodb
/opt/Hjdata/mongodb_express
/opt/Hjdata/xxl-job
/opt/Hjdata/nacos
二、中间件镜像版本清单
MySQL: harbor.evermodel.ai:8721/infra/mysql:8.4.5
Redis: harbor.evermodel.ai:8721/infra/redis:7.4
MinIO: harbor.evermodel.ai:8721/infra/mino/minio:RELEASE.2023-03-20T20-16-18Z 保持在web阉割版本最后
MongoDB: harbor.evermodel.ai:8721/infra/mongo:8.0.10
MongoDB-express: harbor.evermodel.ai:8721/infra/mongo-express:1.0.2
Elasticsearch: harbor.evermodel.ai:8721/infra/elasticsearch:8.18.3
Kibana: harbor.evermodel.ai:8721/infra/kibana:8.18.3
Rocketmq:5.3.3 harbor.evermodel.ai:8721/infra/rocketmq:5.3.3
Rocketmq-dashboard:2.1.0 harbor.evermodel.ai:8721/infra/rocketmq-dashboard:2.1.0
XXL-JOB: harbor.evermodel.ai:8721/infra/xuxueli/xxl-job-admin:3.1.1
Nacos: harbor.evermodel.ai:8721/infra/nacos/nacos-server:v2.3.2-slim
三、docker run 中间件清单
3.1、MySQL: harbor.evermodel.ai:8721/infra/mysql:8.4.5
1、启动mysql8.4.5
docker run -d \
--name mysql-8_4_5 \
--restart=always \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD='pnh8M7gRt%6E' \
-e MYSQL_USER=dev \
-e MYSQL_PASSWORD='pnh8M7gRt%6E' \
-e TZ=Asia/Shanghai \
-v /opt/Hjdata/mysql:/var/lib/mysql \
harbor.evermodel.ai:8721/infra/mysql:8.4.5
2、验证
mysql -h192.168.200.151 -P3306 -udev -ppnh8M7gRt%6E
把dev 授权 xxl-job权限,后面 xxl-job 要用
docker exec -it mysql-8_4_5 mysql -uroot -p'pnh8M7gRt%6E'
GRANT ALL PRIVILEGES ON `xxl-job`.* TO 'dev'@'%';
FLUSH PRIVILEGES;
MySQL 8 默认使用 caching_sha2_password,老客户端/驱动(包括 XXL-JOB 内置的 5.x 驱动)无法认证,表现为“连得上、库看不见”。
把 dev 的认证插件改回 mysql_native_password 即可
3.2、Redis: harbor.evermodel.ai:8721/infra/redis:7.4
# 先创建宿主导线目录
mkdir -p /opt/Hjdata/redis/data /opt/Hjdata/redis/conf
# 可选:提前写一份最小配置(非必须,但推荐)
cat >/opt/Hjdata/redis/conf/redis.conf <<EOF
requirepass 123456
save 900 1
save 300 10
save 60 10000
dir /data
appendonly yes
EOF
# 启动容器
docker run -d --name redis-7_4 \
--restart=always \
-p 16379:6379 \
-v /opt/Hjdata/redis/data:/data \
-v /opt/Hjdata/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf \
harbor.evermodel.ai:8721/infra/redis:7.4 \
redis-server /usr/local/etc/redis/redis.conf
2、连接验证
redis-cli -h 192.168.200.151 -p 16379 -a 123456 ping
redis-cli -h 192.168.200.151 -p 16379 ping
3.3、MinIO: harbor.evermodel.ai:8721/infra/mino/minio:RELEASE.2023-03-20T20-16-18Z 保持在web阉割版本最后
1、拉取指定版本镜像
docker pull minio/minio:RELEASE.2025-04-22T22-12-26Z
2、docker启动镜像
docker run -d --name minio \
--restart=always \
-p 9010:9000 \
-p 9020:9001 \
-e "MINIO_ROOT_USER=admin" \
-e "MINIO_ROOT_PASSWORD=admin123456" \
-v /opt/Hjdata/minIO:/data \
minio/minio:RELEASE.2025-04-22T22-12-26Z \
server /data --console-address ":9001"
3、参数说明
-p 9010:9000 把宿主的 9010 映射到容器的 9000(S3-API 端口)
-p 9020:9001 把宿主的 9020 映射到容器的 9001(Web 控制台端口)
--console-address ":9001" 明确让控制台监听 9001,避免与 API 端口冲突
4、mc命令
mc alias set local http://192.168.200.151:9010 admin admin123456
mc ls local
3.4、
MongoDB: harbor.evermodel.ai:8721/infra/mongo:8.0.10
# 1. 创建宿主导线目录并赋权(官方镜像默认 UID 999)
sudo mkdir -p /opt/Hjdata/mongodb
sudo chown -R 999:999 /opt/Hjdata/mongodb
# 2. 启动容器
docker run -d --name mongo-8_0_10 \
--restart=always \
--network host \
-e MONGO_INITDB_ROOT_USERNAME=root \
-e MONGO_INITDB_ROOT_PASSWORD=123456 \
-v /opt/Hjdata/mongodb:/data/db \
harbor.evermodel.ai:8721/infra/mongo:8.0.10
#3.验证连接
mongosh mongodb://root:123456@192.168.200.151:27017/admin --eval
MongoDB-express: harbor.evermodel.ai:8721/infra/mongo-express:1.0.2
# 1. 准备宿主导线目录并赋权(镜像默认 UID 1000)
sudo mkdir -p /opt/Hjdata/mongodb_express
sudo chown -R 1000:1000 /opt/Hjdata/mongodb_express
# 2. 启动容器
docker run -d --name mongo-express \
--restart=always \
-p 18081:8081 \
-e ME_CONFIG_MONGODB_ADMINUSERNAME=root \
-e ME_CONFIG_MONGODB_ADMINPASSWORD=123456 \
-e ME_CONFIG_MONGODB_URL=mongodb://root:123456@192.168.200.151:27017/admin?authSource=admin \
-e ME_CONFIG_BASICAUTH_USERNAME=mongo \
-e ME_CONFIG_BASICAUTH_PASSWORD=mongo \
-e ME_CONFIG_SITE_BASEURL=/ \
-v /opt/Hjdata/mongodb_express:/data \
harbor.evermodel.ai:8721/infra/mongo-express:1.0.2
3.5、
Elasticsearch: harbor.evermodel.ai:8721/infra/elasticsearch:8.18.3
# 1. 准备宿主导线目录并赋权(镜像默认 UID 1000)
sudo mkdir -p /opt/Hjdata/es
sudo chown -R 1000:1000 /opt/Hjdata/es
# 2. 启动容器
docker run -d --name elasticsearch \
--restart=always \
-p 9200:9200 \
-p 9300:9300 \
-e "discovery.type=single-node" \
-e "ELASTIC_PASSWORD=admin1234" \
-e "xpack.security.enabled=true" \
-v /opt/Hjdata/es:/usr/share/elasticsearch/data \
harbor.evermodel.ai:8721/infra/elasticsearch:8.18.3
Kibana: harbor.evermodel.ai:8721/infra/kibana:8.18.3
sudo chown -R 1000:1000 /opt/Hjdata/kibana
在 ES 里给 kibana_system 设密码(只需一次)
bash
复制
# 进入 ES 容器
docker exec -it elasticsearch bash
# 设密码(与 elastic 保持一致,方便记忆)
bin/elasticsearch-reset-password -u kibana_system -i
# 提示输入新密码:admin1234
docker run -d --name kibana \
--restart=always \
-p 5601:5601 \
-e ELASTICSEARCH_HOSTS=http://192.168.200.151:9200 \
-e ELASTICSEARCH_USERNAME=kibana_system \
-e ELASTICSEARCH_PASSWORD=admin1234 \
-e XPACK_SECURITY_ENCRYPTIONKEY=abcdefghijklmnopqrstuvwxyz123456 \
-v /opt/Hjdata/kibana:/usr/share/kibana/data \
harbor.evermodel.ai:8721/infra/kibana:8.18.3
踩坑:
Kibana 8.x 要求 xpack.security.encryptionKey 至少 32 字符
[2025-10-22T07:51:12.506+00:00][FATAL][root] Reason: [config validation of [xpack.security].encryptionKey]: value has length [20] but it must have a minimum length of [32].
Error: [config validation of [xpack.security].encryptionKey]: value has length [20] but it must have a minimum length of [32]
Kibana 8.x 禁止直接用内置超级用户 elastic 连接集群,要求使用 Kibana 系统账号 或 服务账户 token。
最简解决:改用 内置的 kibana_system 账号(密码跟 elastic 相同,都是 admin1234),再额外给它赋权即可。
Error: [config validation of [elasticsearch].username]: value of "elastic" is forbidden. This is a superuser account that cannot write to system indices that Kibana needs to function. Use a service account token instead. Learn more: https://www.elastic.co/guide/en/elasticsearch/reference/8.0/service-accounts.html
at ensureValidConfiguration (/usr/share/kibana/node_modules/@kbn/core-config-server-internal/src/ensure_valid_configuration.js:44:11)
at Server.preboot (/usr/share/kibana/node_modules/@kbn/core-root-server-internal/src/server.js:181:7)
at Root.preboot (/usr/share/kibana/node_modules/@kbn/core-root-server-internal/src/root/index.js:48:14)
at bootstrap (/usr/share/kibana/node_modules/@kbn/core-root-server-internal/src/bootstrap.js:96:29)
at Command.<anonymous> (/usr/share/kibana/src/cli/serve/serve.js:235:5)
FATAL Error: [config validation of [elasticsearch].username]: value of "elastic" is forbidden. This is a superuser account that cannot write to system indices that Kibana needs to function. Use a service account token instead. Learn more: https://www.elastic.co/guide/en/elasticsearch/reference/8.0/service-accounts.html
3.6
Rocketmq:5.3.3 harbor.evermodel.ai:8721/infra/rocketmq:5.3.3
Rocketmq-dashboard:2.1.0 harbor.evermodel.ai:8721/infra/rocketmq-dashboard:2.1.0
1、准备
mkdir -p /opt/Hjdata/rmq/{namesrv,broker,dashboard}/{logs,store}
docker network create rmq-net # 统一网络,替代 --link
2、NameServer
docker run -d --name rmqnamesrv \
--restart=always \
--network rmq-net \
-p 9876:9876 \
-v /opt/Hjdata/rmq/namesrv/logs:/home/rocketmq/logs \
-v /opt/Hjdata/rmq/namesrv/store:/home/rocketmq/store \
harbor.evermodel.ai:8721/infra/rocketmq:5.3.3 \
sh mqnamesrv
3、Broker + Proxy
docker run -d --name rmqbroker \
--restart=always \
--network rmq-net \
-p 8081:8081 \
-e NAMESRV_ADDR=rmqnamesrv:9876 \
-v /opt/Hjdata/rmq/broker/logs:/home/rocketmq/logs \
-v /opt/Hjdata/rmq/broker/store:/home/rocketmq/store \
--user 0 \
harbor.evermodel.ai:8721/infra/rocketmq:5.3.3 \
sh mqbroker -n rmqnamesrv:9876 --enable-proxy
4、Dashboard
docker run -d --name rmq-dashboard \
--restart=always \
--network rmq-net \
-p 8082:8082 \
-e JAVA_OPTS="-Drocketmq.namesrv.addr=rmqnamesrv:9876" \
-v /opt/Hjdata/rmq/dashboard/logs:/tmp/logs \
harbor.evermodel.ai:8721/infra/rocketmq-dashboard:2.1.0
docker 看容器内监听端口
docker inspect rmq-dashboard --format='{{range $p,$conf := .Config.ExposedPorts}}{{$p}}{{"\n"}}{{end}}'
4、验证
NameServer:telnet 192.168.200.151 9876
Proxy:curl http://192.168.200.151:8081/version
Dashboard:浏览器打开 http://192.168.200.151:8082 → “集群” 页能看到 broker 即正常。
3.7、
XXL-JOB: harbor.evermodel.ai:8721/infra/xuxueli/xxl-job-admin:3.1.1
docker run -d --name xxl-job-admin \
--restart=always \
-p 18080:8080 \
-e PARAMS="--server.port=8080 --xxl.job.accessToken=evermodel.ai" \
-v /opt/Hjdata/xxl-jobs:/data/applogs \
harbor.evermodel.ai:8721/infra/xuxueli/xxl-job-admin:3.1.1
最终命令:
docker run -d --restart=always \
-e PARAMS="--spring.datasource.url=jdbc:mysql://192.168.200.151:3306/xxl_job?autoReconnect=true&useAffectedRows=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true \
--spring.datasource.username=dev \
--spring.datasource.password=pnh8M7gRt%6E \
--xxl.job.accessToken=evermodel.ai" \
-p 18080:8080 \
--name xxl-job-admin harbor.evermodel.ai:8721/infra/xuxueli/xxl-job-admin:3.1.1
验证:
http://192.168.200.151:18080/xxl-job-admin/toLogin
3.8、
Nacos: harbor.evermodel.ai:8721/infra/nacos/nacos-server:v2.3.2-slim
docker run -d --name nacos-server \
-p 8848:8848 \
-p 9848:9848 \
--privileged=true \
--restart=always \
-e MODE=standalone \
-e JVM_XMS=2048m \
-e JVM_XMX=2048m \
-e JVM_XMN=256m \
-e MYSQL_SERVICE_HOST=192.168.200.151 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e MYSQL_SERVICE_USER=dev \
-e MYSQL_SERVICE_PASSWORD=pnh8M7gRt%6E \
-e NACOS_AUTH_ENABLE=true \
-e NACOS_AUTH_IDENTITY_KEY=admin \
-e NACOS_AUTH_IDENTITY_VALUE=admin \
-e NACOS_AUTH_TOKEN=SecretKey10012345678901234567qwertyuioplkjhgfd8999987654901234567890123456789 \
-v /opt/Hjdata/nacos/application.properties:/home/nacos/conf/application.properties \
harbor.evermodel.ai:8721/infra/nacos/nacos-server:v2.3.2-slim