本文记录我把 高仙(Gaussian)机器人对接项目 从“本机能跑”迁到 Docker 一键部署 的全过程:
包含 四个后端服务(gateway/auth/system/robot)前端 NginxMySQL/RedisNacos 配置中心Sentinel 控制台 的改造要点、核心配置与疑难问题修复。
所有敏感密钥均已脱敏,请在私有环境中替换为真实值。


0. 环境与目标

环境版本

  • Docker Desktop / Docker Compose

  • MySQL 8、Redis 7

  • Nacos 2.2.3(宿主机)

  • Sentinel Dashboard 1.8.8(宿主机)(账号/密码:sentinel/sentinel

  • JDK 8/11/17 均可(以项目实际为准)

目标

  1. 代码、配置、镜像、编排 全链路容器化,实现 clone → compose up → 访问

  2. 配置中心化(Nacos):服务从 Nacos 拉取 *-dev.yml

  3. 容器内可连宿主机(Nacos 8848、Sentinel 8718)。

  4. 可复现:镜像已推送至我的 DockerHub,仓库含 README、初始化 SQL、Compose、Nginx 配置。


1. 仓库结构(精简示意)

.
├─ ruoyi-gateway/      # 网关服务(Dockerfile, bootstrap.yml)
├─ ruoyi-auth/         # 认证服务(Dockerfile, bootstrap.yml)
├─ ruoyi-modules/
│  └─ ruoyi-system/    # 系统服务(Dockerfile, bootstrap.yml, mapper/*.xml 改造)
│  └─ ruoyi-robot/     # 机器人服务(Dockerfile, bootstrap.yml)
├─ nginx/
│  ├─ dockerfile
│  └─ conf/nginx.conf  # 反代 /prod-api/** → gateway:8080;静态资源 root 指向 dist
├─ mysql-init/
│  ├─ 00-init.sh       # 创建库并导入 SQL(ry-cloud / ry-config / nacos_config)
│  ├─ 10-ry-cloud.sql
│  └─ 20-ry-config.sql
├─ docker-compose.micro.yml
└─ README.md

2. 关键改造(一图流)

A. system 模块 Mapper 修复 → 统一 com.ruoyi.system.domain.*
B. 四服务 bootstrap.yml Nacos 改为 host.docker.internal:8848
C. Nacos *-dev.yml Redis 指向 redis:6379、数据源指向 mysql8:3306;Sentinel 改宿主机地址
D. Nginx → dist/ 静态托管 + /prod-api/** 反代到 gateway:8080
E. MySQL → 00-init.sh 一键建库建表
F. Compose → extra_hosts + DNS + JAVA_TOOL_OPTIONS 确保容器内网络/协议通畅


3. 改造细节与配置片段

3.1 system:Mapper 与 MyBatis(部署关键点)

问题:微服务化后,部分 XML 仍引用 com.ruoyi.system.api.domain.*,导致运行时 找不到 mapper

统一修复

  • ruoyi-modules/ruoyi-system/mapper/*.xml 中的
    parameterType / resultMap 全部改为 com.ruoyi.system.domain.*

# mybatis配置(这段不能错)
mybatis:typeAliasesPackage: com.ruoyi.system.domainmapperLocations: classpath*:mapper/**/*.xml

3.2 四服务 bootstrap.yml(容器内访问宿主机 Nacos)

spring:cloud:nacos:discovery:server-addr: host.docker.internal:8848config:server-addr: host.docker.internal:8848

说明:容器内的 localhost 只指向容器本身,必须使用 host.docker.internal 才能连到宿主机(Windows/Mac 默认可用;Linux 见 3.5 的 extra_hosts)。

3.3 Nacos 中的 *-dev.yml(统一 Redis/MySQL/Sentinel)

通用 Redis(四服务一致)
spring:redis:host: redisport: 6379password:
数据源(system/robot)
spring:datasource:dynamic:datasource:master:driver-class-name: com.mysql.cj.jdbc.Driverurl: xxxxxxxxusername: rootpassword: 123456
Sentinel(robot 已改,gateway 建议同步)
spring:cloud:sentinel:eager: truetransport:dashboard: host.docker.internal:8718datasource:# robot 的服务内流控/降级规则从 Nacos 拉取flow:nacos:serverAddr: host.docker.internal:8848groupId: DEFAULT_GROUPdataId: ruoyi-robot-flow-rulesdataType: jsonruleType: flowdegrade:nacos:serverAddr: host.docker.internal:8848groupId: DEFAULT_GROUPdataId: ruoyi-robot-degrade-rulesdataType: jsonruleType: degrade
Gateway 路由(节选)
spring:cloud:gateway:routes:- id: ruoyi-authuri: lb://ruoyi-authpredicates: [ Path=/auth/** ]filters: [ StripPrefix=1, CacheRequestBody, ValidateCodeFilter ]- id: ruoyi-systemuri: lb://ruoyi-systempredicates: [ Path=/system/** ]filters: [ StripPrefix=1 ]- id: ruoyi-roboturi: lb://ruoyi-robotpredicates: [ Path=/external/gs/** ]# filters: [ StripPrefix=1 ]  # 如需

3.4 Nginx:静态资源与反向代理

server {listen 80;server_name localhost;# 前端 dist 静态资源location / {root /home/ruoyi/projects/ruoyi-ui;try_files $uri $uri/ /index.html;index index.html index.htm;}# 后端统一入口 → Gatewaylocation /prod-api/ {proxy_set_header Host $http_host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://ruoyi-gateway:8080/;}# 避免暴露健康端点if ($uri ~ "/actuator") { return 403; }
}

3.5 Compose:容器网络增强(Robot 无数据的关键修复

services:ruoyi-robot:# ...extra_hosts:- "host.docker.internal:host-gateway"   # Linux 环境映射宿主机environment:NACOS_SERVER_ADDR: host.docker.internal:8848JAVA_TOOL_OPTIONS: >-Dhttps.protocols=TLSv1.2-Djdk.tls.client.protocols=TLSv1.2-Djava.net.preferIPv4Stack=truedns:- 223.5.5.5- 119.29.29.29

实测:加上 extra_hosts + DNS + TLS 后,高仙 OpenAPI 访问/域名解析更稳定,UI「Robot 无数据」问题消失。

3.6 MySQL:一键建库建表脚本

mysql-init/00-init.sh(节选)

mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e "CREATE DATABASE IF NOT EXISTS \`ry-cloud\`  DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci;CREATE DATABASE IF NOT EXISTS \`ry-config\` DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci;CREATE DATABASE IF NOT EXISTS \`nacos_config\` DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci;
"
mysql -uroot -p"$MYSQL_ROOT_PASSWORD" --database='ry-cloud'  < /docker-entrypoint-initdb.d/10-ry-cloud.sql
mysql -uroot -p"$MYSQL_ROOT_PASSWORD" --database='ry-config' < /docker-entrypoint-initdb.d/20-ry-config.sql
# 可选:
# mysql -uroot -p"$MYSQL_ROOT_PASSWORD" --database='nacos_config' < /docker-entrypoint-initdb.d/30-nacos-mysql.sql

4. 一键启动

# 1) 先在宿主机启动 Nacos(8848)、Sentinel Dashboard(8718)
java -Dserver.port=8718 \-Dcsp.sentinel.dashboard.server=localhost:8718 \-Dproject.name=sentinel-dashboard \-Dcsp.sentinel.api.port=8719 \-jar sentinel-dashboard-1.8.8.jar# 2) docker compose
docker compose -f docker-compose.micro.yml up -d# 3) 访问
# 前端:  http://localhost
# Nacos:  http://localhost:8848/nacos  (nacos/nacos)
# Sentinel: http://localhost:8718

镜像已推送可直接拉取;如需本地构建:

mvn -DskipTests -pl ruoyi-system -am clean package
docker build -f ruoyi-system/Dockerfile -t xxxxx/ruoyi-system:1.0.0 ruoyi-system
docker push xxxxxx/ruoyi-system:1.0.0
# 其他服务同理

5. 验证(Smoke Test)

  • 服务注册:Nacos → ruoyi-gateway/auth/system/robot 均为 UP

  • 路由连通

curl -i http://localhost/prod-api/system/notice/list
curl -i "http://localhost/prod-api/external/gs/status/{SerialNumber}"
  • 前端刷新不 404try_files 生效)

  • Redis/MySQLconnection refusedCommunications link failure

  • Sentinel 能看到 ruoyi-robotruoyi-gateway 实例与已加载的限流/降级规则

6. 重点问题解决(Hotfix 摘要)

6.1 system 容器启动报「找不到 mapper」

  • 现象Invalid bound statement (not found)

  • 根因:XML 仍指向 api.domain

  • 修复:统一改为 com.ruoyi.system.domain.*;Nacos 中 mybatis.typeAliasesPackage/mapperLocations 与之匹配

6.2 前端进入页面后「Robot 无数据」

  • 根因:容器内无法稳定连接宿主机 Nacos/Sentinel,或外网解析/TLS 兼容问题

  • 修复(Compose 关键项)

    extra_hosts:- "host.docker.internal:host-gateway"
    environment:NACOS_SERVER_ADDR: host.docker.internal:8848JAVA_TOOL_OPTIONS: >-Dhttps.protocols=TLSv1.2-Djdk.tls.client.protocols=TLSv1.2-Djava.net.preferIPv4Stack=true
    dns:- 223.5.5.5- 119.29.29.29
    

7. 常见坑位 · 原因 · 修复

问题典型日志根因修复
Nacos 连接 STARTINGClient not connected, status: STARTING容器内连 localhost:8848bootstrap.yml 全改 host.docker.internal:8848
找不到 MapperInvalid bound statementXML 包路径与实体不匹配XML → com.ruoyi.system.domain.*,并同步 MyBatis 配置
Redis 连接失败connection refusedspring.redis.host 用了 127.0.0.1改为 redis(容器名)
MySQL 连接失败Communications link failureURL 用了 localhost改为 mysql8:3306(容器名)
Gateway 路由 404404服务未注册/路由 ID 或 name 不一致对齐 spring.application.namelb://{name}
前端刷新 404404Nginx 未 try_filestry_files $uri $uri/ /index.html;
Sentinel 无实例/无规则空白Dashboard/规则源仍是 localhost全改 host.docker.internal:8718/8848

8. 收尾与建议

  • host.docker.internal 抽成 环境变量(Compose x-environment 统一注入),Linux 统一用 extra_hosts 兼容。

  • Compose 为关键容器加 healthcheckrestart: always,增强自愈。

  • Nacos 规则按环境(dev/prod分组隔离;对网关/机器人输出统一的 限流/降级 策略模板。

  • 预留 K8s 部署(YAML 清单 & Helm),后续上云平滑迁移。

9. 附:实用命令集

# 查看容器日志
docker compose logs -f ruoyi-gateway
docker compose logs -f ruoyi-system# 排查容器内网络
docker exec -it ruoyi-robot sh
curl -I host.docker.internal:8848/nacos
nslookup openapi.gs-robot.com# 重建单服务
docker compose up -d --no-deps --force-recreate ruoyi-system

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/97224.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/97224.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/97224.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

React 业务场景使用相关封装(hooks 使用)

React 业务场景相关方法封装&#xff08;hooks 使用&#xff09; React 中常用的三方 hooks 库 库名特点常见场景官方文档ahooks&#xff08;阿里出品&#xff09;丰富实用的 Hooks&#xff0c;和 Ant Design 配合最佳useRequest&#xff08;请求管理&#xff09;、useDeboun…

[高并发系统设计] - 搭建高并发高可用的系统 - 学习与探究

1.应用场景 主要用于高并发系统设计的架构演进和架构思路。 2.学习/操作 1.文档阅读 搭建高并发、高可用的系统 | Laravel China 社区 高并发&#xff0c; 你真的理解透彻了吗&#xff1f; - 知乎 PHP实战经验之系统如何支撑高并发-51CTO.COM PHP高并发和大流量解决方案整理 …

【小白笔记】Visual Studio 在 2025年7月更新的功能说明(英文单词记忆)

这是NVIDIA软件中关于数据收集&#xff08;Usage Collection&#xff09;的选项。术语解释NVIDIA Nsight Visual Studio Edition&#xff1a;这是一款由NVIDIA开发的工具&#xff0c;专门用于在Visual Studio这个集成开发环境&#xff08;IDE&#xff09;中进行GPU调试和性能分…

THM Whats Your Name WP

信息收集[2025-08-28 21:41:30] [SUCCESS] 端口开放 10.10.208.188:80[2025-08-28 21:41:30] [SUCCESS] 端口开放 10.10.208.188:22[2025-08-28 21:41:31] [SUCCESS] 端口开放 10.10.208.188:8081[2025-08-28 21:41:31] [SUCCESS] 服务识别 10.10.208.188:22 > [ssh] 版本:8…

MySQL底层数据结构与算法浅析

1、概述 MySQL中&#xff0c;当我们发现某个sql的执行时间很长时&#xff0c;最先想到的就是给表加索引&#xff0c;加了索引之后&#xff0c;查询性能就会有显著的提升。 为了知其所以然&#xff0c;那么只有去了解MySQL的底层储存结构和索引的查询算法&#xff0c;只有这样才…

VisualStudio 将xlsx文件嵌入到资源中访问时变String?

如题&#xff0c;就是这么诡异&#xff0c;时至如今已经是visual studio 2022了&#xff0c;你通过界面导入xlsx文件到资源中&#xff0c;它的类型就是String而且没法修改! 即使将文件压缩成zip再导入&#xff0c;依然是String&#xff01; 三哥的骚操作问你服不服! 然而&#…

【视频讲解】R语言海七鳃鳗性别比分析:JAGS贝叶斯分层逻辑回归MCMC采样模型应用

全文链接&#xff1a;https://tecdat.cn/?p43774 原文出处&#xff1a;拓端抖音号拓端tecdat 分析师&#xff1a;Yifei Liu 【视频讲解】R语言海七鳃鳗性别比分析&#xff1a;JAGS贝叶斯分层逻辑回归引言&#xff1a;生态人都懂的痛——样本少、结果被质疑&#xff0c;咋办&am…

Android14 USB子系统的启动以及动态切换相关的init.usb.rc详解

init.usb.rc的作用是在Android系统启动和运行时&#xff0c;通过监听属性&#xff08;sys.usb.config和sys.usb.configfs, sys.usb.typec.mode&#xff09;变化动态&#xff0c;通过写入内核接口 /sys/class/android_usb/ 来配置USB模式。1 USB子系统的启动1.1 on init阶段的配…

宜春城区SDH网图分析

一、SDH网图展示 图片来源&#xff1a; 本地网传输网组SDH网图(2014年12月) - 百度文库 SDH就是Synchronous Digital Hierarchy&#xff0c;同步数字体系的意思。 从分布图可以看出&#xff0c;城区网和工业网一样&#xff0c;是环状结构&#xff0c;保障数据传输的稳定。我的…

lwIP MQTT 心跳 Bug 分析与修复

一、背景在使用 lwIP 内置 MQTT 客户端时&#xff0c;如果你用的是 2.2.0 之前的版本&#xff0c;很可能会遇到一个恼人的问题&#xff1a;客户端和服务器正常连接&#xff0c;但一段时间后 会话被 broker 踢掉。比如常见的现象&#xff1a;Mosquitto / EMQX 日志显示客户端超时…

Golang 面试题「中级」

以下是 100 道 Golang 中级面试题及答案&#xff0c;涵盖并发编程、内存管理、接口实现、标准库深入应用等核心知识点&#xff1a; 一、并发编程基础与进阶问题&#xff1a;Golang 的 GPM 调度模型中&#xff0c;G、P、M 分别代表什么&#xff1f;它们的协作关系是怎样的&#…

沃尔玛AI系统Wally深度拆解:零售业库存周转提速18%,动态定价争议与员工转型成热议点

最近去沃尔玛购物&#xff0c;发现以前总断货的那款早餐麦片居然常年摆在最显眼的货架上&#xff0c;而且价格每周末都会微调——这可不是巧合&#xff0c;背后藏着零售业最硬核的AI操作。沃尔玛去年推出的智能系统Wally&#xff0c;正悄悄改变着我们买东西的体验和商家的运营逻…

AutoDL算力云上传文件太慢了如何解决?

----------------------------------------------------------------------------------------------- 这是我在我的网站中截取的文章&#xff0c;有更多的文章欢迎来访问我自己的博客网站rn.berlinlian.cn&#xff0c;这里还有很多有关计算机的知识&#xff0c;欢迎进行留言或…

【智慧城市】2025年中国地质大学(武汉)暑期实训优秀作品(2):智慧城市西安与一带一路

PART 01 项目背景01政策与时代背景近年来&#xff0c;随着科技的飞速发展和政策的积极推动&#xff0c;我国新型智慧城市建设取得了显著成效。在“十四五”国家信息化规划中&#xff0c;明确提出要打造智慧高效的城市治理体系&#xff0c;推动城市管理精细化、服务智能化。同时…

MySQL数据库精研之旅第十四期:索引的 “潜规则”(上)

专栏&#xff1a;MySQL数据库成长记 个人主页&#xff1a;手握风云 目录 一、索引简介 1.1. 索引是什么 1.2. 为什么需要索引 二、索引应该选择哪种数据结构 2.1. Hash 2.2. 二叉搜索树 2.3. N叉树 2.4. B树 三、MySQL中的页 3.1. 为什么要使用页 3.2. 页文件头和页…

架构设计——云原生与分布式系统架构

** 云原生与分布式系统架构** 5.1 云选型策略&#xff1a;多云、混合云还是单云&#xff1f;如何决定&#xff1f; “上云”已无需讨论&#xff0c;但“上什么云”是第一个战略决策。单云&#xff08;Single Cloud&#xff09;策略&#xff1a; 描述&#xff1a; 将全部资源集中…

Python图片转WebP常用库推荐:Pillow、Wand、cv2

摘要 Python转换图片为WebP&#xff0c;Pillow最推荐&#xff1a;安装简单&#xff08;pip install pillow&#xff09;、使用方便&#xff0c;代码示例显示处理RGBA转RGB等细节&#xff0c;适合多数场景&#xff1b;Wand功能更强基于ImageMagick&#xff0c;适合需高级处理的场…

Android WPS Office 18.20

WPS Office是一款集Word&#xff0c;PDF&#xff0c;Sheet&#xff0c;PowerPoint&#xff0c;表格&#xff0c;文档&#xff0c;云存储&#xff0c;模板库和在线编辑与共享于一体的多功能免费办公套件。它提供类似于Microsoft Office的功能&#xff0c;包括文字处理、表格编辑…

Elasticsearch核心配置与性能优化

以下是Elasticsearch&#xff08;ES&#xff09;的 核心配置项 及 性能优化措施&#xff0c;涵盖硬件、系统、ES配置、索引设计等关键方面&#xff0c;帮助提升集群稳定性与查询性能&#xff1a;一、硬件与系统层优化内存分配 堆内存&#xff08;Heap Size&#xff09;&#xf…

【谷歌浏览器】浏览器实用自用版——谷歌浏览器(Google Chrome)离线纯净版安装 官方版无任何捆绑及广告 【离线安装谷歌浏览器】

经常上网的朋友们肯定深有体会&#xff1a;如今不少浏览器动不动就弹广告、塞插件&#xff0c;用起来简直是折磨。面对这些“全家桶”式捆绑&#xff0c;大家都渴望能找到一款干净、简洁、无打扰的浏览器——这时候&#xff0c;Google Chrome&#xff08;谷歌浏览器&#xff09…