ROS2 Jazzy Jalisco 安装与配置指南:Ubuntu 24.04 环境搭建
1. 从零开始的Jazzy Jalisco为什么选择它作为你的ROS2起点如果你正在机器人领域摸索尤其是从ROS1过渡过来或者想直接上手最新的ROS2那么“Jazzy Jalisco”这个名字最近一定频繁出现在你的视野里。作为ROS2的长期版本Jazzy版本号ROS 2 Jazzy Jalisco在2024年5月发布它带来的不仅仅是又一个字母“J”开头的代号。对于初学者和寻求稳定性的开发者而言Jazzy提供了一个在当前时间点2024-2025年非常理想的平衡点它基于Ubuntu 24.04Noble Numbat构建这意味着你能获得一个相对较新且支持周期长的底层操作系统同时它又不像一些滚动发布的版本那样充满不确定性其“长期支持”的定位意味着在未来几年内你都能获得安全更新和错误修复这对于需要长期维护的机器人项目至关重要。很多新手在入门时容易陷入一个误区盲目追求最新、最炫的版本。但机器人开发尤其是涉及到硬件和复杂系统集成时稳定性往往比前沿性更重要。Jazzy恰好卡在了一个成熟与前瞻的节点上。它继承了前一个LTS版本Humble的稳定基础又引入了一些必要的更新和改进比如对更新的DDS中间件实现如Cyclone DDS更好的支持以及一些工具链的优化。因此将Jazzy作为你的第一个ROS2学习环境可以让你在接触现代ROS2生态的同时避免被一些尚不稳定的实验性功能所困扰把精力集中在核心概念和技能的学习上。2. 安装前的关键决策系统环境与安装方式详解在真正敲下安装命令之前有几个关键决策点直接决定了后续安装的顺利程度和使用体验。这一步走对了后面能省去大量排查环境问题的时间。2.1 操作系统选择Ubuntu 24.04是唯一官方推荐ROS2 Jazzy Jalisco的官方二进制安装包仅针对Ubuntu 24.0464位提供。这是你必须遵守的硬性条件。尝试在其他Linux发行版如Debian、Fedora或旧版本的Ubuntu如22.04、20.04上安装预编译的Jazzy包几乎注定会失败因为存在库依赖和系统版本的严格匹配要求。注意如果你必须使用其他操作系统唯一的途径是通过源码编译但那是一个复杂得多的过程会引入大量额外的依赖和配置问题绝对不推荐给初学者。对于学习目的强烈建议在物理机或虚拟机中安装纯净的Ubuntu 24.04 Desktop。关于虚拟机如VMware、VirtualBox与物理机的选择我的建议是如果你的电脑性能尚可尤其是内存建议分配8GB以上给虚拟机优先使用虚拟机。虚拟机提供了完美的环境隔离和快照功能。你可以在安装过程中任意创建快照一旦把系统搞乱了一键就能恢复到干净状态这对于反复试验和学习ROS的各种操作包括可能会损坏系统的操作来说是无价之宝。物理机安装虽然性能无损但一旦环境污染恢复起来非常麻烦。2.2 安装源配置设置正确的软件仓库这是安装流程中的核心步骤目的是告诉你的Ubuntu系统去哪里下载ROS2的软件包。ROS2的软件包存放在特定的APT仓库中。我们需要将ROS2的仓库源添加到系统的软件源列表里。打开终端依次执行以下命令。每一行命令都有其明确意图我建议你不要一次性复制粘贴所有命令而是逐行执行并观察输出这能帮你更好地理解过程。首先确保你的Ubuntu系统可以访问universe仓库这里包含了许多社区维护的免费开源软件ROS的一些依赖可能在这里。sudo apt install software-properties-common sudo add-apt-repository universe接下来添加ROS2的GPG密钥。GPG密钥是一种数字签名用于验证从仓库下载的软件包是否来自合法的ROS官方没有被篡改。这一步是安全性的保障。sudo apt update sudo apt install curl -y sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg然后将ROS2 Jazzy的仓库源添加到系统。这里我们使用echo命令将仓库信息写入到/etc/apt/sources.list.d/ros2.list这个文件中。注意我们使用了[signed-by]选项来指定刚才导入的密钥环文件这是一种更现代的、安全的源配置方式。echo deb [signed-by/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main | sudo tee /etc/apt/sources.list.d/ros2.list /dev/null命令中的$(lsb_release -cs)会自动获取你当前系统的Ubuntu版本代号对于Ubuntu 24.04它就是noble。这确保了无论你将来在哪个版本上操作这条命令它都能指向对应版本的仓库。2.3 安装类型选择Desktop版 vs. Base版更新软件包索引后你将面临一个选择安装哪个版本的ROS2 Jazzy主要有两种ros-jazzy-desktop(推荐)这是“桌面完整版”。它包含了ROS2的核心库、通信中间件、基础工具如RViz2可视化工具、RQt图形化工具套件以及一系列常用的功能包如TF2、导航栈的仿真包等。对于绝大多数学习和开发场景这是最佳选择。你安装后就可以直接运行大部分教程和演示无需再额外安装一堆包。ros-jazzy-ros-base这是“基础版”。仅包含ROS2的核心通信库RCL, RCLCPP等、命令行工具和最小化的功能包。它体积更小适合在资源受限的嵌入式设备或只想测试核心通信功能的场景。对于初学者如果只安装这个你会发现很多教程里的命令尤其是需要GUI工具的都无法运行。因此除非你有明确的限制否则请毫不犹豫地选择桌面完整版。执行以下命令进行安装sudo apt update sudo apt install ros-jazzy-desktop这个安装过程会持续一段时间取决于你的网速它会自动解决并安装大量的依赖包。期间终端会显示进度你需要确认一次磁盘空间的使用按Y然后回车即可。3. 环境配置与“工作空间”概念初探安装完成并不代表你可以直接使用ros2命令。你需要告诉系统ROS2的库和可执行文件在哪里。这就是环境配置Sourcing的作用。3.1 如何让系统认识ROS2命令ROS2将其核心环境变量设置在一个名为setup.bash或setup.zsh取决于你的shell的脚本文件中。每次打开新的终端你都需要“获取”source这个脚本。对于默认的Bash shell执行source /opt/ros/jazzy/setup.bash执行后你再输入ros2并按回车应该就能看到ROS2命令的帮助信息了而不是“命令未找到”。但是每次新开终端都要手动source一次非常麻烦。一个一劳永逸的方法是将这行命令添加到你的shell启动文件~/.bashrc的末尾。这样每次启动终端时系统都会自动为你配置好ROS2环境。echo source /opt/ros/jazzy/setup.bash ~/.bashrc source ~/.bashrc第二行命令是立即生效让你在当前终端就能用。之后新开的所有终端都会自动配置好。提示如果你使用的是ZshOh My Zsh等对应的启动文件是~/.zshrc命令也需改为source /opt/ros/jazzy/setup.zsh。3.2 理解ROS2工作空间Workspace这是ROS2开发中最核心的概念之一必须从一开始就建立正确的认知。工作空间是你存放自己编写的ROS2代码功能包的专属目录。系统安装的ROS2包在/opt/ros/jazzy下是只读的你不能也不应该在那里修改或添加代码。一个典型的工作空间结构如下~/ros2_ws/ # 工作空间根目录名字可自定如my_robot_ws src/ # 源代码空间 (Source Space)存放所有功能包源码的地方 build/ # 编译空间 (Build Space)CMake/Make编译过程中的中间文件 install/ # 安装空间 (Install Space)编译后生成的可执行文件和库 log/ # 日志空间 (Log Space)编译和运行时的日志src目录是你唯一需要手动创建和管理的。build,install,log目录会在你编译工作空间时由构建工具colcon自动创建。为什么需要这么复杂这源于ROS2的构建系统设计。它允许你将多个独立的功能包放在同一个src下然后一次性编译所有包并处理它们之间的依赖关系。编译后的产物可执行文件、库、消息定义等被集中安装到install目录。当你想要使用这个工作空间里的功能包时你需要source的不是ROS2系统的setup.bash而是你工作空间install目录下的local_setup.bash或setup.bash。后者会“叠加”在系统环境之上使你自定义的包优先级更高。现在让我们创建第一个工作空间并体验一下编译过程mkdir -p ~/ros2_ws/src # 创建带src子目录的工作空间 cd ~/ros2_ws此时你的src目录是空的。我们可以从ROS2的示例库中拉取一些示例代码来测试。git clone https://github.com/ros2/examples src/examples -b jazzy这个命令从ROS2的示例仓库中克隆了jazzy分支的代码到src/examples目录下。4. 第一次构建使用Colcon编译工作空间ROS2使用colcon作为其构建工具。它可能已经在安装桌面版时作为依赖被安装了。你可以通过colcon --help来检查。如果没有可以通过sudo apt install python3-colcon-common-extensions安装。进入工作空间根目录执行构建cd ~/ros2_ws colcon build这是你第一次运行colcon build可能会花上几分钟。colcon会做以下几件事递归查找src目录下的所有功能包通过查找package.xml文件。为每个包配置构建环境调用CMake。编译所有包。将编译产物可执行文件、库等“安装”到install目录下。编译成功后你会在终端看到总结信息并且工作空间内会生成build、install、log三个新目录。4.1 使用你刚刚编译的包要运行你刚刚编译的示例程序你需要source你工作空间的安装文件。注意这里source的是你工作空间install目录下的文件而不是系统的。source ~/ros2_ws/install/local_setup.bash现在环境已经设置好了。让我们运行一个经典的“发布者-订阅者”示例。打开两个终端。在第一个终端运行一个发布者节点它每秒发布一条“Hello World”消息到/topic话题ros2 run examples_rclcpp_minimal_publisher publisher_member_function在第二个终端同样需要先source工作空间环境或者确保.bashrc已配置系统环境运行一个订阅者节点监听/topic话题ros2 run examples_rclcpp_minimal_subscriber subscriber_member_function如果一切正常你将在订阅者终端看到不断打印出的“Hello World: X”消息而发布者终端则显示“Publishing: Hello World: X”。恭喜你你已经成功运行了第一个ROS2通信程序这证明了你的ROS2安装、环境配置、工作空间构建和基本运行都是完全正确的。5. 基础工具链验证与常用命令速览安装并成功运行示例后我们还需要验证几个关键工具并熟悉几个最常用的命令这是后续所有开发的基础。5.1 验证核心工具RViz2与RQtROS2的桌面完整版包含了强大的可视化工具。让我们快速验证它们是否能正常工作。RViz2这是ROS和ROS2中最重要的3D可视化工具。它可以显示机器人模型、传感器数据如激光雷达点云、摄像头图像、坐标系变换TF、路径规划结果等。在终端输入rviz2一个空白的RViz2窗口应该会弹出。你可以通过点击左侧的“Add”按钮来添加各种显示插件。如果窗口成功打开说明GUI相关的依赖安装无误。RQt这是一个基于Qt的图形化工具框架里面集成了许多实用的小工具例如话题查看器rqt_graph、节点图rqt_graph、话题发布器、参数动态重配置器等。运行一个最常用的——节点图工具它可以可视化当前系统中所有节点、话题、服务之间的连接关系。rqt_graph在运行之前的发布者-订阅者例子的同时打开rqt_graph你应该能看到一个包含/publisher_member_function节点、/subscriber_member_function节点以及连接它们的话题/topic的图形。这是一个极其有用的调试工具。5.2 必须掌握的ROS2命令行工具ROS2提供了丰富的命令行工具以下是最常用、必须掌握的几个ros2 node list列出当前系统中所有正在运行的节点。ros2 topic list列出当前系统中所有活跃的话题。ros2 topic echo topic_name实时打印指定话题上流动的消息内容。这是调试时查看数据最直接的方式。ros2 topic info topic_name查看某个话题的详细信息包括消息类型、发布者和订阅者的数量。ros2 interface show msg_type查看某个消息类型如std_msgs/msg/String的具体数据结构。ros2 run package_name executable_name运行指定功能包中的可执行节点。我们刚才已经用过了。ros2 launch package_name launch_file_name启动一个launch文件用于一次性启动多个节点和配置参数。这是启动复杂机器人系统的主要方式。你可以尝试在运行示例的同时打开另一个终端输入ros2 node list和ros2 topic list来查看效果。6. 安装后的必要优化与问题排查指南即使安装成功为了获得更好的开发体验还有一些优化步骤值得一做。同时了解常见问题的排查思路也至关重要。6.1 自动补全与命令行工具增强ROS2的命令行工具支持自动补全按Tab键但这需要额外的包来启用。安装它会让你的操作效率大幅提升。sudo apt install ros-jazzy-ros2cli安装后关闭终端重新打开再输入ros2后按两下Tab键你会看到所有可用的子命令列表。6.2 网络代理与软件源更新问题在国内网络环境下从packages.ros.org下载软件包可能会非常慢甚至失败。一个有效的解决方案是使用国内镜像源。你可以修改之前添加的/etc/apt/sources.list.d/ros2.list文件将URL替换为国内镜像例如中国科学技术大学USTC的镜像sudo sed -i s|http://packages.ros.org/ros2/ubuntu|https://mirrors.ustc.edu.cn/ros2/ubuntu|g /etc/apt/sources.list.d/ros2.list sudo apt update替换后再次执行sudo apt update下载速度通常会有显著改善。6.3 经典问题“Command ‘ros2‘ not found”这是新手遇到最多的问题根本原因就是没有正确source环境。请按以下步骤排查检查是否source在新终端中是否执行了source /opt/ros/jazzy/setup.bash或将其添加到了~/.bashrc可以用echo $ROS_DISTRO命令测试如果输出jazzy则说明环境已加载。检查shell类型如果你使用了Zsh确保source的是setup.zsh并且命令添加到了~/.zshrc。检查路径极少数情况下安装可能不完整。确认/opt/ros/jazzy/bin目录是否存在且包含ros2可执行文件。6.4 编译错误缺失依赖包在编译自己的或从GitHub克隆的第三方功能包时常会遇到编译错误提示找不到某个头文件或库。这通常是因为缺少对应的ROS2依赖包。每个ROS2功能包都在其package.xml文件中声明了依赖。你可以使用rosdep工具来自动安装这些依赖。首先确保rosdep已初始化并更新sudo rosdep init rosdep update然后在你的工作空间src目录下运行以下命令来安装所有缺失的依赖rosdep install -i --from-path src --rosdistro jazzy -yrosdep会解析src下所有包的package.xml并尝试通过系统的包管理器apt安装列出的依赖。这是解决编译依赖问题的标准做法。7. 下一步行动从安装到真正入门至此一个完整、可用的ROS2 Jazzy开发环境已经搭建完毕。但安装只是万里长征的第一步。为了真正“入门”我建议你立即开始以下实践将环境用起来完成官方教程访问ROS2官方文档docs.ros.org找到“Jazzy”版本的教程从“Beginner: CLI Tools”开始系统地学习节点、话题、服务、参数、动作等核心概念。务必动手敲一遍命令。创建你的第一个功能包不要只停留在运行示例。在工作空间src目录下使用ros2 pkg create命令创建一个属于自己的功能包尝试编写一个简单的发布者或订阅者。哪怕只是修改示例中的消息内容这个过程会让你理解包的结构。学习使用Launch文件机器人系统通常由多个节点组成。学习编写.launch.py文件来一次性启动它们并学习如何在launch文件中设置参数。探索仿真安装ros-jazzy-turtlebot3-*包或ros-jazzy-gazebo-*包尝试在Gazebo仿真环境中驱动一个虚拟机器人。这是学习机器人导航、SLAM等高级功能的安全且低成本的方式。记住ROS2是一个工具核心在于理解其基于节点的分布式通信思想。安装环境是赋予你使用这个工具的能力而持续的项目实践和概念学习才是让你从“安装成功”走向“运用自如”的关键。这个基于Ubuntu 24.04和Jazzy的稳定环境将成为你未来很长一段时间内探索机器人世界的可靠基地。

相关新闻

AI编程助手上下文管理:从Token到智能工作区的核心机制与实践

AI编程助手上下文管理:从Token到智能工作区的核心机制与实践

1. 从一次“失忆”的对话说起:为什么我们需要上下文管理?如果你用过早期的AI编程助手,或者尝试过在聊天窗口里写一段很长的代码,你很可能遇到过这样的场景:你让AI助手帮你写一个函数,它写得很好&#xff1b…

2026/9/8 20:14:33 阅读更多 →
Windows系统80004005错误排查指南:从权限到系统修复的完整解决方案

Windows系统80004005错误排查指南:从权限到系统修复的完整解决方案

1. 问题初探:为什么80004005如此“常见”? 如果你在Windows系统上折腾过数据库连接、访问过网络共享文件夹,或者安装过某些专业软件,那么“80004005”这串数字对你来说可能一点都不陌生。它就像一个神出鬼没的幽灵,总是…

2026/9/9 21:04:32 阅读更多 →
从PyTorch到MLIR:Buddy-MLIR DeepSeek模型导入与编译器优化实战

从PyTorch到MLIR:Buddy-MLIR DeepSeek模型导入与编译器优化实战

1. 项目概述与核心价值最近在折腾AI模型部署和推理优化,特别是想把一些新出的、性能不错的开源大模型,比如DeepSeek系列,真正用起来。直接调用现成的API固然方便,但想深入理解模型结构、做定制化优化,或者部署在特定硬…

2026/9/13 14:44:32 阅读更多 →

最新新闻

OpenClaw插件生态:15款高效工具与开发实践

OpenClaw插件生态:15款高效工具与开发实践

1. OpenClaw插件生态概述 OpenClaw作为一款新兴的多功能自动化工具,其强大之处在于开放的插件架构设计。2026年版本通过模块化设计实现了功能解耦,核心系统仅保留基础运行环境,90%以上的功能实现都交由插件完成。这种架构带来的直接优势是用户…

2026/9/13 18:00:24 阅读更多 →
SAP ABAP文件上传下载类方法封装:方法参数设计最佳实践

SAP ABAP文件上传下载类方法封装:方法参数设计最佳实践

上个月接手一个物流行业的 SAP 存量项目,业务方翻来覆去就一个要求:旧的上传下载程序不要再搬了,界面按钮背后能不能直接调用后台的方法?我第一反应是,这需求听着简单,其实暴露了一个很多 ABAP 项目积压多年…

2026/9/13 18:00:24 阅读更多 →
Linux设备驱动开发实战:从内核模块到设备树与I2C驱动

Linux设备驱动开发实战:从内核模块到设备树与I2C驱动

做了几年 Linux 设备驱动开发,我必须先承认一个事实:驱动难,不是难在写代码,而是难在搞懂内核那套机制和硬件之间的配合关系。网上关于驱动开发的学习资料非常多,但多数要么讲得太理论,要么直接甩一个 hell…

2026/9/13 18:00:24 阅读更多 →
LabVIEW UDS刷写核心VI:TOOMOSS_SendAndWaitResp深度解析

LabVIEW UDS刷写核心VI:TOOMOSS_SendAndWaitResp深度解析

1. 这不是个普通VI,它是CAN UDS刷写流程的“心脏起搏器”你打开LabVIEW项目,看到TOOMOSS_SendAndWaitResp.vi这个图标,第一反应可能是——又一个封装好的子VI,双击进去大概率是黑盒。但如果你真这么想,接下来调试UDS刷…

2026/9/13 18:00:24 阅读更多 →
ADC与CAN双结点协同设计:嵌入式系统确定性架构实践

ADC与CAN双结点协同设计:嵌入式系统确定性架构实践

1. 项目概述:为什么“ADC/CAN双结点控制”不是两个功能简单拼凑,而是嵌入式系统架构升级的关键跳板“ADC/CAN双结点控制”这个标题乍看像一句技术缩写堆砌,但在我拆解过三十多个工业现场控制项目后,它实际代表一种从单点感知向分布…

2026/9/13 18:00:24 阅读更多 →
Refine v5 Mantine FileField 组件详解:在列表中优雅地展示文件下载链接

Refine v5 Mantine FileField 组件详解:在列表中优雅地展示文件下载链接

Refine v5 Mantine FileField 组件详解:在列表中优雅地展示文件下载链接 【免费下载链接】refine A React Framework for building internal tools, admin panels, dashboards & B2B apps with unmatched flexibility. 项目地址: https://gitcode.com/GitHub_…

2026/9/13 17:59:23 阅读更多 →

日新闻

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验 【免费下载链接】ai The AI Toolkit for TypeScript. From the creators of Next.js, the AI SDK is a free open-source library for building AI-powered applications and ag…

2026/9/13 0:00:24 阅读更多 →
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化 【免费下载链接】refine A React Framework for building internal tools, admin panels, dashboards & B2B apps with unmatched flexibility. 项目地址: https://gitcode.com/GitH…

2026/9/13 0:00:24 阅读更多 →
Flutter应用改名全指南:从Android到iOS的配置与工具实践

Flutter应用改名全指南:从Android到iOS的配置与工具实践

刚接一个外包项目时,甲方要求把工程里临时用的应用名改成正式产品名。我本来觉得“改名”这种小事,打开配置文件改一行不就完了?结果真动手才发现,Flutter项目里“应用名称”根本不是一处配置,而是一整套散落在 Androi…

2026/9/13 0:00:24 阅读更多 →

周新闻

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验 【免费下载链接】ai The AI Toolkit for TypeScript. From the creators of Next.js, the AI SDK is a free open-source library for building AI-powered applications and ag…

2026/9/13 0:00:24 阅读更多 →
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化 【免费下载链接】refine A React Framework for building internal tools, admin panels, dashboards & B2B apps with unmatched flexibility. 项目地址: https://gitcode.com/GitH…

2026/9/13 0:00:24 阅读更多 →
Flutter应用改名全指南:从Android到iOS的配置与工具实践

Flutter应用改名全指南:从Android到iOS的配置与工具实践

刚接一个外包项目时,甲方要求把工程里临时用的应用名改成正式产品名。我本来觉得“改名”这种小事,打开配置文件改一行不就完了?结果真动手才发现,Flutter项目里“应用名称”根本不是一处配置,而是一整套散落在 Androi…

2026/9/13 0:00:24 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/13 16:51:11 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/12 18:29:34 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/12 19:02:44 阅读更多 →