若依微服務一鍵部署(RuoYi-Cloud):Nacos/Redis/MySQL + Gateway + Robot 接入(踩坑與修復全記錄)

本文記錄我把 高仙(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…