cisd/docs/deployment/tms-deployment.md
2026-04-07 09:45:27 +08:00

877 lines
24 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# TMS 部署手册
## 1. 文档目的
本文档用于说明如何在 CentOS Linux 主机上按标准运行路径 `/home/tms` 部署 TMS以及如何准备 CISD 初始化所需的相关脚本、目录、文件和配置。
本文档覆盖以下内容:
- TMS jar 包部署
- `/home/tms` 运行目录结构
- 外部配置文件
- `/home/tms/bin` 下的标准初始化辅助脚本
- 文件上传与 `fileId` 存储规则
- 启动、停止、状态检查
- 初始化前置检查和常见故障排查
本文档不替代厂商提供的 CIPS 部署手册。中间件和标准收发器基础安装仍属于预置工作。
## 2. 部署边界
TMS 负责:
- 提供 internal/openapi HTTP 服务
- 管理 CISD 初始化任务
- 渲染客户化配置
- 调用已配置的初始化后置脚本
-`fileId` 解析上传文件
预置层负责:
- JDK 安装
- TiDB/MySQL 客户端可用
- RabbitMQ/TLQ/nginx 安装
- 标准收发器介质解压到 `/home/cemp4i`
- 直参版介质解压到厂商约定目录
- 数据库凭据和 RabbitMQ 管理员凭据
## 2.1 核心原则:先部署预置,再执行初始化
当前 CISD 初始化功能不是完整替代厂商部署手册,而是建立在“基础环境和介质已就绪”的前提上执行客户化步骤。
因此现场应严格分成两个阶段:
### 第一阶段:部署/出厂预置阶段
由运维或出厂人员提前完成,目标是把机器准备成“可接受初始化”的基线环境。
### 第二阶段CISD 初始化阶段
由 TMS 根据前端输入的客户化参数执行目标是完成机构号、节点地址、MQ/TLQ、数据库导入、应用配置、WEB 发布和启动验收。
如果第一阶段未完成,第二阶段不应直接试跑。
## 2.2 部署阶段必须提前完成的步骤
以下内容必须在部署阶段完成,不应再依赖 `/api/v1/init/**` 初始化接口去补做。
### 2.2.1 操作系统与基础目录
需要提前完成:
- 系统用户、用户组创建
- 标准收发器运行目录创建
- 目录权限和属主设置
- `/home/cemp4i`、`/home/tms`、`/home/tlq` 等目录存在且可访问
这类动作属于一次性环境准备,不属于客户化初始化。
### 2.2.2 基础软件安装
需要提前完成:
- JDK 安装
- nginx 安装
- RabbitMQ 安装
- TLQ 基础软件安装
- TiDB/MySQL 客户端可用
- `rabbitmqctl`、`rabbitmqadmin`、`mysql`、`unzip` 等命令可用
初始化阶段默认依赖这些命令和软件已经存在。
### 2.2.3 标准收发器介质上传与解压
需要提前完成:
- 企业版 / 间参版标准收发器介质解压到 `/home/cemp4i`
- 直参版介质解压到厂商约定目录
- `cpconfig.cfg`
- `cpackage/toolsh/*.sh`
- `cpackage/rabq/*.sh`
- `cpackage/software/nginx.conf`
- `cpackage/front/front.zip`
- SQL 模板和 JAR 介质文件存在
当前初始化流程假定这些文件已经存在,不负责解压标准介质。
### 2.2.4 平台级凭据预置
需要提前完成:
- 数据库导库账号/密码
- RabbitMQ 管理员账号/密码
- 其他平台级敏感配置
这些凭据不属于前端输入的客户化参数,建议通过:
- 环境变量
- 独立受保护配置文件
- 现场预置脚本
进行管理。
### 2.2.5 防火墙、服务注册和开机自启
需要提前完成:
- 防火墙端口放通
- RabbitMQ/nginx 服务注册
- 必要的开机自启设置
这类动作属于环境级配置,不应放在初始化阶段重复执行。
### 2.2.6 标准收发器部署文档中应提前做的脚本
结合标准收发器部署文档和当前 TMS 初始化边界,以下脚本应视为部署阶段脚本,不纳入初始化主流程:
- `setpd.sh`
- `opencport.sh`
- `install_newpackage.sh`
- `setrabqstart.sh`
- `setxsd.sh`
- `setngservice.sh`
- `pongx.sh`
这些脚本覆盖的通常是:
- 用户与目录准备
- 端口开放
- RabbitMQ 编译/安装/服务化
- nginx 安装/服务化
- 信创依赖和基础环境处理
### 2.2.7 厂商脚本与部署阶段的对应关系
下表用于帮助现场快速判断:哪些脚本应在部署阶段提前执行,哪些不应再放到初始化接口中执行。
| 脚本 | 建议阶段 | 说明 |
|---|---|---|
| `setpd.sh` | 部署阶段 | 用户、目录、权限等基础准备 |
| `opencport.sh` | 部署阶段 | 端口开放,属于系统环境配置 |
| `install_newpackage.sh` | 部署阶段 | RabbitMQ/OTP 安装与编译 |
| `setrabqstart.sh` | 部署阶段 | RabbitMQ 服务启动/服务化准备 |
| `setxsd.sh` | 部署阶段 | 信创/环境依赖准备 |
| `setngservice.sh` | 部署阶段 | nginx 服务注册/服务化 |
| `pongx.sh` | 部署阶段 | 基础环境处理脚本 |
| `setup_nodeps.sh` | 部署阶段 | 基础无依赖环境准备 |
| `setsuseunixodbc.sh` | 部署阶段 | ODBC/基础运行依赖准备 |
## 2.3 标准版初始化阶段执行的步骤
以下内容属于客户化初始化,保留在 `/api/v1/init/**` 流程中执行。
### 2.3.1 配置渲染
包括:
- `cpconfig.cfg` 渲染
- 机构号、节点地址、组织名称等客户化字段写入
### 2.3.2 license 和输入文件处理
包括:
- 收发器 license 上传
- TLQ license / 配置包上传
- CFMQ 配置上传
- 通过 `fileId` 暂存并按目标路径落位
### 2.3.3 MQ/TLQ 客户化初始化
包括:
- `SET_RABBITMQ`
- `SET_TLQ`
- `TLQ_CONF_APPLY`
- RabbitMQ 通道账号和队列初始化
说明:
- 标准版 RabbitMQ 用户/队列初始化是客户化动作
- 但 RabbitMQ 软件本体安装、服务注册必须提前完成
### 2.3.4 数据库初始化
包括:
- `DB_RENDER`
- `DB_APPLY`
说明:
- 当前 TMS 负责渲染 SQL 和触发导库命令
- 但数据库客户端可用、导库凭据可用,必须由部署阶段保证
### 2.3.5 应用、nginx 和 WEB 客户化
包括:
- `DEPLOY_RECEIVER`
- `APP_MQ_CREDENTIALS_APPLY`
- `NGINX_CONFIG_APPLY`
- `WEB_CONFIG_APPLY`
说明:
- 这些步骤处理的是客户化配置和发布
- 不是安装 nginx 或解压标准介质
### 2.3.6 启动和校验
包括:
- `START_CMSP_CMTP`
- `START_NGINX`
- `POST_CHECK`
- `VERIFY`
说明:
- 当前初始化阶段负责启动和验收
- 但对应启动脚本、停止脚本、运行用户和目标路径需要提前准备好
### 2.3.7 厂商脚本与初始化阶段的对应关系
下表用于说明:哪些厂商脚本仍在初始化阶段使用,哪些脚本已经被当前 TMS 内置逻辑替代。
| 脚本/能力 | 当前阶段 | 当前处理方式 |
|---|---|---|
| `setfraq.sh` | 初始化阶段 | 仍由 TMS 调用,用于切换标准版 `RABBITMQ` 模式 |
| `setftq.sh` | 初始化阶段 | 仍由 TMS 调用,用于切换 `TLQ``RABBITMQ_TLQ` 模式 |
| `settlq.sh` | 初始化阶段 | 仍由 TMS 调用,用于落位和替换 TLQ 配置 |
| `setuprabq.sh` | 初始化阶段 | 由 TMS staging 后执行,不直接污染源脚本 |
| `addrabq_R_01.sh` / `addrabq_R_02.sh` | 初始化阶段 | 由 TMS staging 后执行,按节点选择 |
| `setsql.sh` | 初始化阶段 | 已不再作为主导入口;当前改为 `DB_RENDER + DB_APPLY` |
| `setsptp.sh` | 初始化阶段 | 仍由 TMS 调用,用于标准收发器应用部署 |
| `setweb.sh` | 初始化阶段 | 当前由 TMS 内置 `WEB_CONFIG_APPLY` 替代 |
| `setngx.sh` | 初始化阶段 | 当前由 TMS 内置 `NGINX_CONFIG_APPLY` 替代 |
需要注意:
- `setweb.sh``setngx.sh` 所代表的“WEB 发布”和“nginx 配置发布”仍属于初始化阶段动作
- 只是当前代码不再直接执行这两个脚本,而是由 TMS 内置逻辑完成
## 2.4 分版本预置清单
本节在通用边界之外,再按版本给出一份现场可直接对照的清单,帮助运维快速判断:
- 当前设备属于哪个版本
- 初始化前必须先准备好哪些内容
- 初始化阶段还会继续执行哪些客户化动作
### 2.4.1 企业版预置清单
适用范围:
- `ENTERPRISE + RABBITMQ`
- `ENTERPRISE + TLQ`
部署阶段必须完成:
- 标准版介质已解压到 `/home/cemp4i`
- `/home/cemp4i/cpconfig.cfg`、`/home/cemp4i/cpackage/toolsh/*.sh`、`/home/cemp4i/cpackage/sql_script/*`、`/home/cemp4i/cpackage/front/front.zip` 已存在
- JDK、nginx、RabbitMQ、TLQ、数据库客户端已安装
- `/home/tms`、`/home/cemp4i`、`/home/tlq` 目录及权限已准备
- 数据库导库凭据、RabbitMQ 管理员凭据已预置
- `standard-db-apply-command`、`standard-app-start-command`、`standard-nginx-start-command`、`standard-post-check-command` 对应脚本已部署
按支持方式补充要求:
| 支持方式 | 部署前额外要求 | 初始化阶段仍会执行 |
|---|---|---|
| `RABBITMQ` | RabbitMQ 服务可用,`rabbitmqctl`、`rabbitmqadmin` 可执行 | `SET_RABBITMQ`、RabbitMQ 用户和队列初始化、应用 MQ 账号写回 |
| `TLQ` | TLQ 基础软件和目录可用,`/home/tlq` 可写 | `SET_TLQ`、`TLQ_CONF_APPLY`、TLQ 配置包落位 |
企业版初始化阶段不会补做:
- RabbitMQ/TLQ 软件安装
- nginx 安装和服务注册
- 数据库账号创建
- 标准介质解压
### 2.4.2 间参版预置清单
适用范围:
- `INDIRECT + RABBITMQ`
- `INDIRECT + RABBITMQ_TLQ`
部署阶段必须完成:
- 标准版介质已解压到 `/home/cemp4i`
- 间参版对应的 `setsptp.sh`、`setfraq.sh`、`setftq.sh`、`settlq.sh`、RabbitMQ 脚本、SQL 模板已齐备
- JDK、nginx、RabbitMQ、TLQ、数据库客户端已安装
- `/home/tms`、`/home/cemp4i`、`/home/tlq` 目录及权限已准备
- 数据库导库凭据、RabbitMQ 管理员凭据已预置
- TMS 所依赖的标准初始化辅助脚本已部署到 `/home/tms/bin`
按支持方式补充要求:
| 支持方式 | 部署前额外要求 | 初始化阶段仍会执行 |
|---|---|---|
| `RABBITMQ` | RabbitMQ 服务可用 | `SET_RABBITMQ`、RabbitMQ 用户和队列初始化、应用 MQ 账号写回 |
| `RABBITMQ_TLQ` | RabbitMQ 和 TLQ 都要提前可用 | `SET_TLQ`、`TLQ_CONF_APPLY`,同时仍会执行 RabbitMQ 用户和队列初始化 |
需要特别说明:
- 间参版不存在“纯 TLQ”初始化模式
- `RABBITMQ_TLQ` 不是替代 RabbitMQ而是 RabbitMQ 与 TLQ 共存
- 因此如果现场只准备了 TLQ、没有准备 RabbitMQ间参版 `RABBITMQ_TLQ` 初始化仍会失败
### 2.4.3 轻量直参版预置清单
适用范围:
- `DIRECT + RABBITMQ_TLQ`
- `DIRECT + RABBITMQ_CFMQ`
部署阶段必须完成:
- 直参版介质已按厂商要求解压到约定目录
- 直参版 `cpconfig.cfg` 已在厂商约定位置存在
- 直参版数据库脚本目录、TLQ/CFMQ 相关目录、签名服务依赖目录已存在
- JDK、RabbitMQ、TLQ 或 CFMQ、数据库客户端已安装
- 数据库导库凭据、RabbitMQ 管理员凭据已预置
- 直参版初始化依赖的目标路径具备写权限
按支持方式补充要求:
| 支持方式 | 部署前额外要求 | 初始化阶段仍会执行 |
|---|---|---|
| `RABBITMQ_TLQ` | RabbitMQ 与 TLQ 运行环境都已就绪 | `MQ_USER_APPLY`、`DB_INIT`、`TLQ_INIT_CFG` |
| `RABBITMQ_CFMQ` | RabbitMQ 与 CFMQ 运行环境都已就绪 | `MQ_USER_APPLY`、`DB_INIT`、`CFMQ_APPLY` |
直参版与标准版的差异:
- 不走标准版 `/home/cemp4i/cpackage/toolsh/*.sh` 主链
- 不走标准版 `DB_RENDER + DB_APPLY`
- 不走标准版 `WEB_CONFIG_APPLY`、`NGINX_CONFIG_APPLY`
- 初始化更依赖直参版厂商目录结构和配置文件落位
### 2.4.4 现场使用建议
现场可以按以下顺序判断:
1. 先看设备预制版本是 `ENTERPRISE`、`INDIRECT` 还是 `DIRECT`
2. 再看该版本下的支持方式是 `RABBITMQ`、`TLQ`、`RABBITMQ_TLQ` 还是 `RABBITMQ_CFMQ`
3. 先完成本节对应版本的预置项
4. 再进入 `/api/v1/init/template -> /preview -> /tasks -> /execute` 初始化流程
如果当前版本对应的预置项没有完成,不要直接尝试执行初始化任务。
## 2.5 不应再由初始化阶段执行的内容
为了避免把“环境搭建”与“客户化初始化”混在一起,以下动作不应再由初始化阶段重复承担:
- 创建系统用户和用户组
- 批量创建基础目录
- 安装或编译 RabbitMQ
- 安装或编译 nginx
- 开放系统端口
- 解压标准收发器完整介质
- 创建数据库导库账号
- 创建 RabbitMQ 管理员账号
- 注册 systemd / rc.local 服务
这些动作应在出厂或部署阶段完成。
## 3. 环境要求
### 3.1 操作系统
推荐环境:
- CentOS 或兼容 Linux 发行版
### 3.2 Java
运行时要求:
- JDK 17
检查命令:
```bash
java -version
```
### 3.3 网络与端口
TMS 默认监听端口:
- `8080`
检查命令:
```bash
ss -lntp | grep 8080
```
### 3.4 建议具备的系统命令
建议系统具备以下命令:
- `java`
- `bash`
- `curl`
- `jq`
- `mysql`
- `pgrep`
- `unzip`
可选但推荐:
- `ss`
- `lsof`
## 4. 标准运行目录结构
TMS 统一部署到 `/home/tms`
```text
/home/tms
├── tms-framework.jar
├── bin
│ ├── apply_standard_db.sh
│ ├── start_standard_apps.sh
│ ├── start_standard_nginx.sh
│ └── check_standard_runtime.sh
├── config
│ └── application.yml
├── logs
│ ├── tms-framework.out.log
│ └── tms-framework.err.log
├── run
│ └── tms-framework.pid
├── scripts
│ └── tms.sh
├── tmp
│ └── tms-init-logs
└── uploads
└── <fileId>
└── <originalFilename>
```
目录用途:
- `/home/tms/bin`:初始化后置辅助脚本目录,由 `tms.init.executor.*command` 引用
- `/home/tms/config`Spring Boot 外部配置目录
- `/home/tms/logs`TMS 运行日志
- `/home/tms/run`PID 文件目录
- `/home/tms/scripts`TMS 启停控制脚本目录
- `/home/tms/tmp`:初始化执行日志和临时目录
- `/home/tms/uploads`:上传文件目录,初始化阶段按 `fileId` 解析
## 5. 部署物来源映射
| 部署目标 | 仓库来源 |
|---|---|
| `/home/tms/tms-framework.jar` | `target/tms-framework-*.jar` |
| `/home/tms/scripts/tms.sh` | `scripts/tms.sh` |
| `/home/tms/bin/apply_standard_db.sh` | `scripts/standard-init/apply_standard_db.sh` |
| `/home/tms/bin/start_standard_apps.sh` | `scripts/standard-init/start_standard_apps.sh` |
| `/home/tms/bin/start_standard_nginx.sh` | `scripts/standard-init/start_standard_nginx.sh` |
| `/home/tms/bin/check_standard_runtime.sh` | `scripts/standard-init/check_standard_runtime.sh` |
| `/home/tms/config/application.yml` | 由 `config/application.yml.example` 复制生成 |
## 6. 部署步骤
### 6.1 构建 jar 包
```bash
cd /Users/waner/Work/CISD/文档/tms-framework
mvn -q -DskipTests package
```
### 6.2 创建运行目录
```bash
sudo mkdir -p /home/tms/{bin,config,scripts,logs,run,tmp,uploads,libs}
sudo chown -R "$(whoami)":"$(whoami)" /home/tms
```
### 6.3 拷贝运行文件
```bash
cp target/tms-framework-*.jar /home/tms/tms-framework.jar
cp scripts/tms.sh /home/tms/scripts/tms.sh
cp scripts/standard-init/*.sh /home/tms/bin/
cp config/application.yml.example /home/tms/config/application.yml
chmod +x /home/tms/scripts/tms.sh
chmod +x /home/tms/bin/*.sh
```
### 6.4 检查部署结果
```bash
ls -l /home/tms/tms-framework.jar
ls -l /home/tms/scripts/tms.sh
ls -l /home/tms/bin
ls -l /home/tms/config/application.yml
```
## 7. 外部配置文件
TMS 从以下位置加载外部配置:
- `/home/tms/config/application.yml`
- 显式设置 `SPRING_PROFILES_ACTIVE` 时,额外加载 `/home/tms/config/application-\${SPRING_PROFILES_ACTIVE}.yml`
运行控制脚本:
- [tms.sh](/Users/waner/Work/CISD/文档/tms-framework/scripts/tms.sh)
### 7.1 最低必配项
至少需要检查并设置:
```yaml
tms:
security:
internal-token: change-me-internal-token
file:
storage:
upload-base-dir: /home/tms/uploads
max-file-size-bytes: 104857600
init:
executor:
mode: LOCAL
log-dir: /home/tms/tmp/tms-init-logs
upload-base-dir: /home/tms/uploads
staging-root-dir: /home/tmp/tms-init-staging
standard-db-apply-command: /home/tms/bin/apply_standard_db.sh
standard-app-start-command: /home/tms/bin/start_standard_apps.sh
standard-nginx-start-command: /home/tms/bin/start_standard_nginx.sh
standard-post-check-command: /home/tms/bin/check_standard_runtime.sh
```
### 7.2 必须保持一致的配置
以下两个路径必须保持一致:
- `tms.file.storage.upload-base-dir`
- `tms.init.executor.upload-base-dir`
如果两者不一致,会出现“上传成功,但初始化执行阶段找不到文件”的问题。
### 7.3 标准版初始化关键配置
标准版初始化重点配置项:
- `standard-home-dir`:默认 `/home/cemp4i`
- `standard-cpconfig-path`:标准版 `cpconfig.cfg` 路径
- `standard-db-script-base-dir`:默认 `${standard-home-dir}/cpackage`
- `standard-db-load-dir`:默认 `${standard-home-dir}/mysql/loadfilepath`
- `standard-nginx-template-path`nginx 模板路径
- `standard-web-front-zip-path`:默认 `${standard-home-dir}/cpackage/front/front.zip`
- `standard-web-target-dir`:默认 `/usr/local/nginx/html`
- `standard-web-organization-json-path`:默认 `/usr/local/nginx/html/organization.json`
### 7.4 不建议直接写入 application.yml 的凭据
除非现场策略允许,否则不建议把以下信息直接写进 `/home/tms/config/application.yml`
- `apply_standard_db.sh` 使用的数据库密码
- 跨主机共享的数据库用户名
- 辅助脚本依赖的其他敏感环境变量
推荐方式:
- 在启动 TMS 前通过环境变量导出
- 或通过独立受保护的环境文件,由辅助脚本自行加载
## 8. 标准初始化辅助脚本
这些脚本部署到 `/home/tms/bin`,由 TMS 初始化执行器在标准版流程中调用。
### 8.1 `apply_standard_db.sh`
来源:
- [apply_standard_db.sh](/Users/waner/Work/CISD/文档/tms-framework/scripts/standard-init/apply_standard_db.sh)
作用:
- 不存在时创建 `CMEP` 数据库
- 导入 `SCHEMA-DDL.sql`
- 导入 `CMEP.sql`
- 导入 `UP-ORG-INFO.sql`
必需环境变量:
- `DB_USER`
- `DB_PASSWORD`
可选环境变量:
- `DB_HOST`,默认 `127.0.0.1`
- `DB_PORT`,默认 `4000`
- `DB_NAME`,默认 `CMEP`
- `LOAD_DIR`,默认 `/home/cemp4i/mysql/loadfilepath`
示例:
```bash
export DB_USER=app_user
export DB_PASSWORD='secret'
/home/tms/bin/apply_standard_db.sh
```
### 8.2 `start_standard_apps.sh`
来源:
- [start_standard_apps.sh](/Users/waner/Work/CISD/文档/tms-framework/scripts/standard-init/start_standard_apps.sh)
作用:
- 启动 CMSP
- 启动 CMTP
依赖:
- `/home/cemp4i/cmsp/start_cmsp.sh`
- `/home/cemp4i/cmtp/start_cmtp.sh`
- 用户 `cmep4i`
### 8.3 `start_standard_nginx.sh`
来源:
- [start_standard_nginx.sh](/Users/waner/Work/CISD/文档/tms-framework/scripts/standard-init/start_standard_nginx.sh)
作用:
- 如果 nginx 已运行则执行 reload
- 如果 nginx 未运行则按 `/usr/local/nginx/conf/nginx.conf` 启动
依赖:
- `/usr/local/nginx/sbin/nginx`
### 8.4 `check_standard_runtime.sh`
来源:
- [check_standard_runtime.sh](/Users/waner/Work/CISD/文档/tms-framework/scripts/standard-init/check_standard_runtime.sh)
作用:
- 检查 CMSP 进程是否存在
- 检查 CMTP 进程是否存在
- 检查 nginx 进程是否存在
- 检查 `/usr/local/nginx/html/organization.json` 是否存在
该脚本仅用于初始化后的结果校验,不负责修复。
## 9. 文件上传与 `fileId` 模型
### 9.1 核心原则
CISD 初始化接口本身不接收 multipart 文件。
前端正确流程是:
1. 用户选择文件
2. 前端先调用文件上传接口
3. 后端返回 `fileId`
4. 前端在初始化 JSON 中提交 `fileId`
### 9.2 存储结构
上传文件统一保存为:
```text
/home/tms/uploads/<fileId>/<originalFilename>
```
### 9.3 初始化常用文件字段
初始化请求中常见的文件引用字段:
- `licenses.receiverLicenseFileId`
- `mq.tlqLicenseFileId`
- `mq.cfmqConfigFileId`
- `licenses.cfgZipFileId`
### 9.4 初始化执行阶段的解析规则
执行器会依次尝试解析:
- `/home/tms/uploads/<fileId>`
- `/home/tms/uploads/<fileId>/<preferredFileName>`
因此文件上传服务和初始化执行器必须使用同一个上传根目录。
## 10. 启动、停止与状态检查
### 10.1 启动
```bash
/home/tms/scripts/tms.sh start
```
### 10.2 停止
```bash
/home/tms/scripts/tms.sh stop
```
### 10.3 重启
```bash
/home/tms/scripts/tms.sh restart
```
### 10.4 状态
```bash
/home/tms/scripts/tms.sh status
```
### 10.5 运行日志
主要日志:
- `/home/tms/logs/tms-framework.out.log`
- `/home/tms/logs/tms-framework.err.log`
常用查看命令:
```bash
tail -n 100 /home/tms/logs/tms-framework.out.log
tail -n 100 /home/tms/logs/tms-framework.err.log
```
## 11. 初始化前置检查
预检查脚本:
- [cisd_init_precheck.sh](/Users/waner/Work/CISD/文档/tms-framework/scripts/cisd_init_precheck.sh)
执行方式:
```bash
chmod +x /Users/waner/Work/CISD/文档/tms-framework/scripts/cisd_init_precheck.sh
PRODUCT_TYPE=ENTERPRISE /Users/waner/Work/CISD/文档/tms-framework/scripts/cisd_init_precheck.sh
```
检查内容包括:
- 产品类型是否合法
- 执行模式是否正确
- 日志目录是否可写
- 标准版基础文件是否存在
- RabbitMQ 工具是否可用
- 直参版场景下的脚本目录是否存在
- 标准介质与初始化依赖是否已经完成预置
建议在首次联调前执行一次。
## 11.1 现场建议的执行顺序
建议按以下顺序实施:
### 步骤 1完成部署阶段预置
至少确认:
- 基础软件已安装
- 标准介质已解压
- 运行目录和用户已准备
- 平台级凭据已准备
- `/home/tms` 已部署完毕
### 步骤 2执行本机预检查
执行:
```bash
PRODUCT_TYPE=ENTERPRISE /Users/waner/Work/CISD/文档/tms-framework/scripts/cisd_init_precheck.sh
```
或按实际产品类型设置:
- `ENTERPRISE`
- `INDIRECT`
- `DIRECT`
### 步骤 3启动 TMS
执行:
```bash
/home/tms/scripts/tms.sh start
```
### 步骤 4通过前端或接口执行初始化
在确认预置无误后,再执行:
- 文件上传
- 初始化预检
- 创建初始化任务
- 执行初始化任务
## 12. 初始化运行期目录与日志
### 12.1 初始化步骤日志
由以下配置控制:
- `tms.init.executor.log-dir`
推荐路径:
- `/home/tms/tmp/tms-init-logs`
### 12.2 初始化 staging 目录
由以下配置控制:
- `tms.init.executor.staging-root-dir`
默认路径:
- `/home/tmp/tms-init-staging`
staging 中通常包含:
- 渲染后的 `cpconfig.cfg`
- 暂存的 license / 配置文件
- 渲染后的 SQL 包
- 渲染后的 nginx 配置
- 暂存的 web 静态资源
## 13. 常见故障排查
### 13.1 TMS 无法启动
现象:
- `tms.sh start` 失败
- 未生成 PID 文件
检查:
```bash
java -version
ls -l /home/tms/tms-framework.jar
ls -l /home/tms/config/application.yml
tail -n 200 /home/tms/logs/tms-framework.err.log
```
### 13.2 `DB_APPLY` 报错 `standardDbApplyCommand is blank`
含义:
- SQL 已经渲染并复制成功
- 但未配置真实导库命令
修复:
- 确保 `/home/tms/config/application.yml` 中存在:
```yaml
standard-db-apply-command: /home/tms/bin/apply_standard_db.sh
```
- 确保脚本存在并可执行
- 确保 `DB_USER`、`DB_PASSWORD` 已经提供
### 13.3 `cpconfig not found`
检查:
- `standard-cpconfig-path`
- 直参版 `cfgZipFileId`
- 标准版介质是否已解压到 `/home/cemp4i/cpconfig.cfg`
### 13.4 初始化阶段按 `fileId` 找不到文件
现象:
- 步骤日志显示已尝试 `/home/tms/uploads/...`
- 但所有候选路径都不存在
检查命令:
```bash
find /home/tms/uploads -maxdepth 2 -type f | sort
```
重点确认:
- 上传接口的落盘根目录是否正确
- 初始化请求中的 `fileId` 是否与上传返回值一致
- `tms.file.storage.upload-base-dir` 是否与 `tms.init.executor.upload-base-dir` 一致
### 13.5 RabbitMQ 命令或队列步骤失败
检查:
- `rabbitmqctl`
- `rabbitmqadmin`
- `standard-rabbit-setup-script-path`
- `standard-rabbit-queue-script-path`
- 步骤日志内容
### 13.6 WEB 发布或 nginx 启动失败
检查:
```bash
ls -l /home/cemp4i/cpackage/front/front.zip
ls -l /usr/local/nginx/conf/nginx.conf
ls -l /usr/local/nginx/html
pgrep -f '/usr/local/nginx/sbin/nginx'
```
同时确认:
- `/home/tms/bin/start_standard_nginx.sh` 存在
- `standard-web-front-zip-path` 指向正确的标准版前端包
- 发布后 `organization.json` 已生成
## 14. 推荐的本机检查命令
```bash
/home/tms/scripts/tms.sh status
ss -lntp | grep 8080
curl -s http://127.0.0.1:8080/api/v1/device/status
find /home/tms/uploads -maxdepth 2 -type f | sort
ls -l /home/tms/bin
ls -l /home/tms/config/application.yml
```
对标准初始化辅助脚本做语法检查:
```bash
bash -n /home/tms/bin/apply_standard_db.sh
bash -n /home/tms/bin/start_standard_apps.sh
bash -n /home/tms/bin/start_standard_nginx.sh
bash -n /home/tms/bin/check_standard_runtime.sh
```