openEuler + 毕昇 JDK + Tengine:RuoYi Office 国产化部署实战
一套企业管理平台迁入国产软件环境,员工仍然需要打开工作台、填写申请、处理待办。本文以 RuoYi Office 的 openEuler 实验环境为线索,把操作系统、Java 运行环境、Web 接入和国产数据库串成一条能验收的部署链路。
▲ 等距部署空间表达的是软件承载关系:openEuler 提供运行环境,Tengine 接入浏览器请求,毕昇 JDK 运行应用,达梦保存业务与流程数据。
引言:部署完成,为什么员工还打不开审批单?
企业采购提出国产化要求时,实施工作很容易被拆成几张互不关联的清单:操作系统装好了,JDK 安
装成功,数据库容器也启动了。每一项都有绿色状态,交付人员却仍可能面对一个白屏的管理端。
原因在于,用户访问的是完整产品链路。浏览器需要取得正确的 JavaScript 文件,请求要到达后端
,后端必须连接正确的 schema,登录后的菜单和权限还要匹配业务页面。
其中任何一段失配,都不能靠另一层“服务已启动”来证明交付完成。
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
本文采用的验收主线是:浏览器入口 → 企业工作台 → 用印申请 → 流程结果。安装动作服务于
这条主线,组件名称也能对应到具体职责。
一、先看员工在国产环境中使用什么
RuoYi Office 的 PC 管理端是 Vue3 Web 应用。员工从浏览器进入工作台,查看待办,打开 OA 业
务表单;审批人从待办详情查看申请内容和审批轨迹。
对用户来说,更换服务器操作系统和数据库不会产生另一套办公流程。菜单、表单、权限和审批模型
仍属于同一个产品。
1. 工作台是部署结果的第一个产品入口
▲ 既有开发环境工作台截图,用于展示产品入口;本图不是 openEuler 或达梦实测证据。国产环境结论见下文实验记录。
工作台能加载,至少说明浏览器资源、路由、后端认证和部分数据查询已经连通。它仍然只是第一层
产品验证,因为工作台不一定涉及流程引擎写入和业务回调。
接下来应选一张字段足够完整的业务单据,把日期、中文、关联数据和流程状态带进验收。
2. 表单比空白列表更能暴露部署问题
▲ 既有开发环境用印表单,展示印章、用章时间、文件信息和业务事由;用于说明部署后的字段检查点。
用印申请涉及基础资料、人员部门、日期时间和流程变量。页面是否能完整打开、字段是否显示正确
,比查看一张没有数据的列表更有判断价值。
这里应区分“打开表单”和“成功提交”。前者偏重查询与前端渲染,后者会触发主键生成、业务写入和
流程创建。
3. 详情与轨迹让验证走到业务结果
▲ 既有开发环境用车审批详情,展示单据与流程上下文;这是产品页面示例,历史国产库闭环结果来自 2026 年 9 月实验记录。
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
这些页面共同构成部署验收,不应只用首页截图代替。
二、openEuler 上的四层软件职责
实验室采用 VMware x86_64 虚拟机,实际安装 openEuler 24.03 LTS SP2。它提供的是可复建的软
件环境,不能延伸为某款国产 CPU 已完成适配的结论。
1. openEuler 承载应用运行条件
操作系统需要提供稳定的目录、权限、服务管理、网络和运行库。对 Java 应用而言,“Linux 都一
样”不能替代环境核对:数据库介质、JDK 架构和系统库都必须匹配。
实验目录把应用、静态文件、日志和数据库数据分开。这样更新应用包时,不会把数据库数据目录当
成待替换的程序文件。
|
|
|
|
|---|---|---|
|
|
/data/ruoyi-office/app/ |
|
|
|
/data/ruoyi-office/web/current/ |
|
|
|
/etc/ruoyi-office/*.env |
|
|
|
/data/ruoyi-office/logs/ |
|
|
|
|
|
2. 毕昇 JDK 负责运行应用
实验室验证的是 BiSheng JDK 17.0.19。应用由 Java 17 构建和运行,切换 JDK 发行版时还需要核
对堆配置、编码、证书以及第三方本地依赖。
已有安装脚本优先尝试系统软件包;包不可用时,从指定镜像源下载对应架构压缩包,并校验 SHA-2
56。下载成功与校验成功是两个动作,后者用于保证介质来源与内容一致。
也不能只看到 /usr/bin/java 存在就断言正在使用毕昇。原脚本在已有 Java 时会跳过安装,因
此现场应实际执行 java -version,核对发行版和版本号。
3. Tengine 提供浏览器接入
Tengine 3.1.0 服务前端静态文件,并将 /admin-api/ 请求反向代理到后端。前端页面与业务 AP
I 共用访问入口,员工无需知道后端监听端口。
JavaScript、CSS 和图片应命中静态资源位置;业务请求应命中 API 代理。两者都返回 200,也不
意味着内容正确。
一个常见错误是:不存在的 JavaScript 路径被 SPA 回退规则返回 index.html。浏览器随后把 H
TML 当作脚本解析,表现为白屏或 MIME 类型错误。
因此验收应查看请求的内容类型,静态资源应返回对应类型,不能只统计响应码。
4. 达梦保存业务与流程数据
DM8 实验环境使用独立数据库运行时,业务 schema 为 RUOYI_OFFICE。应用通过专用 JDBC 驱动
连接,数据库端口绑定本机回环地址。
Redis 保留为会话与缓存兼容基线。使用 openEuler、毕昇、Tengine 和达梦,不会自动把 Redis、
Spring Boot 内嵌容器或其他依赖变成国产替代产品。
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
尤其要区分反向代理与 Java 应用服务器。把 Tengine 换成或增加某个接入组件,并不等于已经完
成 TongWeb / BES 的 WAR 部署。
三、把软件安装收束成可复用部署资产
1. 固定资产关系,减少“这台机器能跑”的偶然性
▲ 部署资产的逻辑关系图,不是平台新增数据库表:同一套应用包读取环境参数,连接目标数据库,并通过接入配置服务用户。
真正需要维护的不是一串安装命令,而是应用包、环境参数、数据库初始化包和服务单元之间的配套
关系。
同一后端包可以包含多个数据库驱动;最终连接哪个数据库,由启用的 Profile、JDBC URL、账号及
schema 共同决定。
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2. 用 systemd 固定应用启动方式
下面是现有服务单元摘录。它把数据库环境名称同时映射到环境文件和 Spring Profile,减少“文件
改了,启动参数仍是旧库”的失配。
[Unit]Description=RuoYi Office (%i database)After=network-online.target tengine.service opengauss.service redis.serviceWants=network-online.target[Service]Type=simpleUser=roadminGroup=roadminWorkingDirectory=/data/ruoyi-office/appEnvironmentFile=/etc/ruoyi-office/%i.envExecStart=/usr/bin/java -Xms{JAVA_XMX} -Dfile.encoding=UTF-8 -jar /data/ruoyi-office/app/yudao-server.jar --spring.profiles.active=prod,xinchuang-%iSuccessExitStatus=143Restart=on-failureRestartSec=10LimitNOFILE=65535
%i 表示实例名称。例如启动 ruoyi-office@dm8 时,会读取 dm8.env,并激活prod,xinchuang-dm8。
服务单元的 After 主要约束启动顺序,不能证明数据库已经接受连接。实际部署还要检查数据库
运行状态与应用健康。
Restart=on-failure 适合处理异常退出,但它不会修复错误密码、缺表或错误 schema。遇到重复
启动失败,应定位首个异常,不应靠连续重启掩盖配置错误。
3. 把接入规则限定到真实请求类型
下面摘取现有 Tengine 配置中页面回退和 API 代理部分。静态资源还有独立前缀处理,部署时要与
前端构建产物的资源路径一起核对。
sendfile on;keepalive_timeout 65;client_max_body_size 100m;location / {try_files $uri $uri/ /index.html;}location /admin-api/ {proxy_pass http://127.0.0.1:48080/admin-api/;proxy_set_header Host remote_addr;proxy_set_header X-Forwarded-For scheme;proxy_connect_timeout 10s;proxy_read_timeout 120s;}
页面路由刷新需要 SPA 回退,API 请求则必须转发到后端。规则顺序、前端 base、资源前缀以及
代理路径共同决定用户能否顺利进入系统。
测试时可以依次打开首页、刷新深层单据路由,再查看一条 API 响应。三种请求都正确,才说明接
入层没有只照顾首页。
4. 用 Profile 固定数据库与流程建表策略
DM8 Profile 的关键配置包括 JDBC、Quartz 和 Flowable。下面是现有配置的连续摘录,使用占位
参数传入密码,文章不提供真实环境密钥。
data:redis:host: {REDIS_PORT:6379}database: {REDIS_PASSWORD:please-change-me}quartz:job-store-type: jdbcjdbc:initialize-schema: neverflowable:database-schema-update: falsedatabase-schema: ${FLOWABLE_DATABASE_SCHEMA:RUOYI_OFFICE}mybatis-plus:global-config:db-config:id-type: AUTO
Flowable 的 database-schema-update=false 与 Quartz 的 initialize-schema=never,共同
要求实施人员先交付匹配的初始化结构。
这不是“禁止升级数据库”,而是把数据库升级放到显式、可核对的交付步骤中,避免一次应用重启同
时承担部署和结构变更两种责任。
5. 按可观察顺序验证服务
▲ 先准备数据与参数,再启动服务,最后通过浏览器进入业务;后一步的成功依赖前一步,但健康检查不能替代业务验收。
建议按“数据库可连接 → 应用健康 → 接入资源正确 → 登录 → 代表业务”递进。若工作台正常但流程
提交失败,应定位业务写入或引擎层,而不是重新安装操作系统。
四、部署成功需要什么证据
2026 年 9 月实验记录包含以下结果。数字描述的是当时的软件与数据基线,不是容量指标或生产性
能承诺。
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
openGauss 在同一软件环境完成启动、登录、流程发布和用印填报。其本轮最终证据没有覆盖完整审
批,不应因为共用了相同操作系统就自动提升验证等级。
1. 应用包、数据包与参数必须一起归档
现场交付应记录应用版本、前端产物、数据库初始化来源、JDK 与数据库版本。只保存 JAR,很难解
释后续为什么同一个包在另一台机器表现不同。
数据库从 8 月基线初始化,而应用已包含 9 月新增字段时,还需要目标库版本的配套增量。登录成
功只能证明登录使用的表结构齐全,不能证明其他模块也齐全。
2. 快照方便复建,备份承担恢复
VMware 快照适合在实验阶段保留安装节点,但数据库恢复仍需数据库备份与恢复演练。生产运行不
能把宿主机快照视为唯一备份。
应用文件、数据库和上传目录需要不同的保留策略。恢复数据库但没有附件文件,会产生“单据正常
、附件失效”的不一致。
3. 最小验证和扩展验证分开安排
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
一次用印流程的通过非常有价值,但它的价值是证明一条具体链路,不是替代所有模块测试。
五、如何把实验方案带到客户现场
客户现场先确认采购的操作系统、CPU 架构、数据库及版本,再选择匹配介质。实验室是 x86_64,A
RM 和 LoongArch 需要对应 JDK、数据库与本地组件介质。
接着核对客户启用的业务模块,选择一条代表流程。对有公文、附件预览或在线编辑需求的客户,补
上相应文件与办公组件验收。
最终交付应让实施人员能够回答四个问题:入口在哪里,应用连接哪个库,初始化包来自哪里,恢复
时要恢复哪些数据。
建议现场按以下顺序操作:
-
核对服务器架构与软件版本。 -
固定应用、日志、上传与数据库目录。 -
安装运行环境并核对实际 Java 版本。 -
导入目标库初始化包及配套增量。 -
配置环境文件与服务单元。 -
启动目标数据库、应用与 Web 接入。 -
登录并打开代表表单与流程结果。 -
记录版本、观察结果及未覆盖范围。
这份顺序不是为了增加文档数量,而是让另一位实施人员能按相同输入复建环境。
从一台实验机走向客户现场:用一张访问路径卡交接
假设客户使用内网域名访问系统,应用、数据库和 Tengine 部署在同一台服务器。
交接时,实施人员应画出真实访问路径,并为每段保留一个观察点。
浏览器取得静态资源
先打开首页,确认入口 HTML 与构建资源来自同一套前端产物。
再选择一个实际 JavaScript 请求,观察内容类型和响应正文。
若响应是 HTML,问题通常仍在资源路径与接入规则;此时重建数据库没有帮助。
最后刷新一个深层业务路由,确认页面路由回退正常。
这些动作分别覆盖首页、静态资源和 SPA 路由,避免三者共用一个“访问成功”的模糊结论。
应用读取正确参数
核对 systemd 实例名、环境文件名与当前 Profile。
再确认 JDBC URL 指向目标 schema,用户名拥有所需权限。
参数文件存在并不表示实例已经重新读取它。修改参数后,应按照实际部署方式重新加载或重启,并
查看新的启动时间。
对生产环境,不把实验室关闭验证码的设置直接照搬过去。
前后端验证码、租户选择、身份系统参数应以客户批准的认证方案为准。
数据库提供配套业务资产
区分“账号可连接”与“业务 schema 已准备好”。
账号能执行简单查询,只证明一小部分数据库能力。
接着核对代表用户、字典、印章资料和激活流程定义。
最后使用获准测试单据观察完整状态,记录单号与结果。
若只有普通员工无法打开模块,应检查角色与菜单数据,不能把它直接归入数据库连接故障。
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
把扩展组件留在它自己的链路上
例如客户需要在线编辑文件,单据审批正常并不能证明编辑器也已完成部署。
需要核对文件访问、编辑器回调与网络地址,避免把内网地址传给无法访问内网的组件。
客户需要地图或外部身份系统时,也应取得对应参数和访问权限。
这类检查依附具体需求,不应让未启用组件成为基础部署的无意义阻断项。
做一次能解释的恢复演练
在获准测试环境,从一份明确备份恢复数据库,并使用配套应用和文件目录进入产品。
记录恢复后的代表单号、附件访问与新增结果。
如果业务单恢复了,附件却打不开,首先核对文件资产有没有包含在恢复范围。
如果历史记录可查,但新增失败,首先核对目标版本的主键与序列。
不要把恢复演练变成“所有页面点一遍”。选取能覆盖身份、历史、关联与新写入的代表路径,信息量
更高。
交接卡应该怎样写
一张实用交接卡至少包含环境组合、应用包身份、数据基线、访问入口、参数位置与恢复资产。
其中密码引用客户的凭据管理位置,不在卡片正文填写真实密钥。
再附上已执行的代表用例及剩余验证项,接手人员就能沿着同一条访问路径复核。
|
|
|
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
部署方案写到这里,才从“安装教程”变成可接手的运行方案。
六、快速体验
在线演示:https://ruoyioffice.com/web/
演示账号:admin / admin123。在线环境用于体验产品,不代表当前连接国产数据库。
在“工作台”查看待办,在“OA → 用印管理”打开申请详情,再到流程中心查看已有审批轨迹。先观察
已有单据,可避免为了看页面反复制造测试数据。
本地前端启动命令:
cd ruoyi-office-vbenpnpm dev:antd
后端采用 Java 17、单体启动方式。使用国产库前,应完成对应初始化数据和环境参数配置,不能仅
在启动命令上追加 Profile。
常见问题(FAQ)
openEuler 上部署 RuoYi Office,必须采用微服务吗?
不需要。实验室验证采用 Spring Boot 单体。微服务涉及网关、注册配置中心等额外组件,应按实
际规模和交付要求选择。
安装了毕昇 JDK,就能确定应用使用了它吗?
还需核对实际 java -version 与 systemd 启动使用的 Java 路径。机器存在另一套 Java 时,安
装脚本和替代链接可能使运行版本与预期不同。
Tengine 页面返回 200,可以作为部署通过标准吗?
只能说明该请求有响应。还要核对静态资源类型、API 代理、登录和代表业务,避免 HTML 回退掩盖
错误资源路径。
这套实验说明已经完成全部国产化认证吗?
它提供指定版本的软件工程验证。采购要求中的厂商互认证、国产整机和正式测评,需要对应版本及
厂商流程另行确认。
结语:让每一层软件都能对应到产品结果
openEuler、毕昇 JDK、Tengine 和国产数据库的组合,最终应落到用户可见的工作台、业务表单和
审批结果。
RuoYi Office 的部署资产把应用包、参数与目标数据库分开管理,使国产化方案能够持续复建和验
证。真正有用的交付,不止告诉客户装了哪些软件,也能解释每一层怎样支撑企业办公。
你在国产化项目中最常遇到的是静态资源、数据库初始化,还是流程与业务状态回写问题?这些问题
值得分别建立验收用例。
系列阅读
-
SpringBoot3 + 达梦 DM8:RuoYi Office 用印申请与多级审批实战 -
SpringBoot3 + openGauss:RuoYi Office 登录、流程发布与用印填报适配实战 -
达梦 DM8 + openGauss:RuoYi Office 的 MySQL 数据转换与导入实践 -
达梦 DM8、openGauss、人大金仓怎么选?RuoYi Office 国产数据库适配与验收指南 -
openEuler + 达梦 DM8 + openGauss:RuoYi Office 多库部署与运行维护实践

