cisd/docs/deployment/tms-deployment.md
2026-03-11 14:23:11 +08:00

522 lines
12 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 管理员凭据
## 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}
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`
运行控制脚本:
- [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 工具是否可用
- 直参版场景下的脚本目录是否存在
建议在首次联调前执行一次。
## 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
```