mirror of
https://github.com/hpd840321/starRiverProperty.git
synced 2026-06-10 00:40:30 +08:00
c5febc9905
- Update deploy/README.md: remove NincaCrkStdRibbonConfiguration ref, update JAR naming, add v2.0.17 config instructions - Update elevator-v1-v2-init-timing-config-audit.md: add baseline note - Update org-policy-verify-manual.md: JAR path + AppApplication class - Update release script comment with current baseline version - docs/AGENTS.md and service-discovery spec already updated in v2.0.17
127 lines
8.4 KiB
Markdown
127 lines
8.4 KiB
Markdown
# 电梯应用双版本同路径部署
|
||
|
||
每个发行目录内 **JAR**、**`application.properties`**、**`application-access-control.properties`**(与生产 access-control 对齐)、**`bootstrap.properties`**(Consul)与 **`redis-override.properties`** 位于**同一目录**。`run.sh` 使用:
|
||
|
||
```bash
|
||
--spring.config.location=file:./application.properties,file:./application-access-control.properties,file:./redis-override.properties
|
||
```
|
||
|
||
(说明见下文:Boot 1.5 下 jar 内 `classpath:/application.properties` 往往最后生效,仅靠外置文件盖不住密码;**profile=access-control** 的分表与门禁业务参数以外置 **`application-access-control.properties`** 为准,内容已与 **`星中心/cw-elevator-application-V1.0.0.20211103/application-access-control.properties`** 同步。)
|
||
|
||
## 目录
|
||
|
||
| 目录 | JAR | 端口(见配置首行) |
|
||
|------|-----|-------------------|
|
||
| `v1-legacy/` | `cw-elevator-application-V1.0.0.20211103.jar` | **18080** |
|
||
| `v2-maven/` | `cw-elevator-application-V1.0.0.20211103.jar`(固定名,与 V1 一致) | **18081** |
|
||
|
||
**`application.properties`**:在验证环境常用的 JDBC / Redis / Ribbon / Kafka / 端口等覆盖(数据库为生产还原时,请把 **jdbc-url、账号** 指到承载还原库的实例)。
|
||
|
||
**`application-access-control.properties`**:生产门禁侧参数(含 **ShardingSphere 分表 `2020..2030`**、门禁阈值、定时任务开关等),与 **星中心** 部署目录保持一致;更新时请从星中心同名文件覆盖后再提交。
|
||
|
||
属性文件最初由历史包 `cw-elevator-application-V1.0.0.20211103/application.properties` 演化而来;头部保留 **`server.port`**(18080 / 18081)便于双实例并行(对拍 / API 套件)。
|
||
|
||
## 一次性同步 JAR
|
||
|
||
在 **`deploy/`** 下执行(需已存在 V1 原始 JAR;V2 优先用 **`releases/cw-elevator-application-V<版本>.<日期>/`** 中最新的同名 JAR,其次兼容旧路径 `releases/v<版本>/`,否则用 `cw-elevator-application-starter/target/`):
|
||
|
||
```bash
|
||
./sync-jars.sh
|
||
```
|
||
|
||
## 启动(两个终端)
|
||
|
||
```bash
|
||
cd v1-legacy && ./run.sh
|
||
```
|
||
|
||
```bash
|
||
cd v2-maven && ./run.sh
|
||
```
|
||
|
||
探活示例:`curl -s http://127.0.0.1:18080/actuator/health` 与 `18081`。
|
||
|
||
## Consul(`192.168.3.12` Docker)
|
||
|
||
本仓库在 **`v1-legacy/bootstrap.properties`**、**`v2-maven/bootstrap.properties`** 中写入,并与 **V1 运行包 `bootstrap.properties` 中 Consul 段**对齐:
|
||
|
||
- `spring.cloud.consul.host=192.168.3.12`
|
||
- `spring.cloud.consul.port=8500`
|
||
- `spring.cloud.consul.enabled=true`
|
||
- `spring.cloud.consul.discovery.register=true`
|
||
- **`spring.cloud.consul.discovery.enabled=false`**(与 V1 一致:不作为 Consul **客户端**做服务发现)
|
||
- `spring.profiles.active=access-control`(与 V1 一致)
|
||
|
||
用于覆盖 fat-jar 内 **`10.128.161.95:8500`**,与 **`deploy/consul-docker`**(`hashicorp/consul:1.22`)对齐。在同一目录执行 `./run.sh` 时,Spring Cloud 会加载上述 **`bootstrap.properties`**。
|
||
|
||
验证 Consul:`curl -s http://192.168.3.12:8500/v1/status/leader`。浏览器打开 **`http://192.168.3.12:8500`** 可看 UI。
|
||
|
||
**Dubbo 属性说明**:`bootstrap.properties` 中的 `dubbo.*` 属性为历史遗留(V1 携带),当前运行时**未启用 Dubbo**(POM 中无 Dubbo 依赖),这些属性不生效。
|
||
|
||
### Feign 上游服务(Ribbon 静态列表)
|
||
|
||
在 **`spring.cloud.consul.discovery.enabled=false`**(与 V1 对齐)时,不从 Consul 拉取上游服务实例。Feign 通过 **Ribbon + ConfigurationBasedServerList** 从 **`application.properties`** 中 **`{服务名}.ribbon.listOfServers`** 读取静态 IP 列表,按环境配置:
|
||
|
||
```properties
|
||
ninca-crk-std.ribbon.listOfServers=10.0.22.102:16106
|
||
ninca-common-component-organization.ribbon.listOfServers=...
|
||
ninca-common.ribbon.listOfServers=...
|
||
```
|
||
|
||
(V2 v2.0.17 起不再需要 `NIWSServerListClassName` 或 `NincaCrkStdRibbonConfiguration`,Ribbon 默认 `ConfigurationBasedServerList`。)
|
||
|
||
## Redis 与 `SPRING_APPLICATION_JSON`
|
||
|
||
fat JAR 的 `classpath:/application.properties` 会带内网旧 **host** 与 **password**;在 Spring Boot 1.5 下,同目录的 `application.properties` / `redis-override.properties` 往往**压不过** jar 里同文件(见上节说明)。
|
||
|
||
**当前做法**:`deploy/merge-redis-json.sh` 读取各目录下的 **`redis-override.properties`**,生成一行 **`SPRING_APPLICATION_JSON`**(包含 `spring.redis.host` / `port` / `password`),由 `run.sh` **`export`** 后再启动 JVM,优先级高于打包配置。
|
||
|
||
- 默认已指向 **`redis-override.properties`** 中的地址与口令(若你的环境不一致,直接改该文件)。
|
||
- **临时覆盖口令**:`SPRING_REDIS_PASSWORD='别的密码' ./run.sh`(若设为**空字符串**表示使用无密码 Redis)。
|
||
- 需要 **python3**。
|
||
- **勿把生产口令提交到公开仓库**;团队协作时口令宜走密钥管理,`redis-override.properties` 仅作本机示例。
|
||
|
||
## 修改配置
|
||
|
||
直接编辑对应目录下的 **`application.properties`**、**`application-access-control.properties`**(与 JAR 同路径),重启进程生效。
|
||
若 **Consul KV** 中存在同名 `spring.shardingsphere.*` 等键,**运行时仍以 Consul 覆盖为准**,需与库表、本地文件三方对齐后再做生产模拟。
|
||
|
||
## 生产模拟时还可对齐的项(按需)
|
||
|
||
| 配置来源(星中心) | deploy 中对应位置 | 说明 |
|
||
|-------------------|------------------|------|
|
||
| `bootstrap.properties`(Consul / Dubbo) | `v1-legacy/bootstrap.properties` | 当前保留验证用 Consul 地址;生产 Consul host、Dubbo `zookeeper://...` 若需一致,在确认网络可达后按需合并(V2 构建一般不写 Dubbo)。 |
|
||
| `application.properties`(jdbc/redis/kafka) | 同上目录 `application.properties` + `redis-override.properties` | 还原库在哪台 MySQL、Redis 是否同生产,由你在本机改 URL/口令;**勿将生产口令提交到公开仓库**。 |
|
||
| `application-access-control.properties` | 已内置与星中心同内容 | 生产变更分表年限时,从星中心覆盖此文件。 |
|
||
|
||
## JDK 版本(避免 `InaccessibleObjectException` / CGLIB)
|
||
|
||
历史 JAR 面向 **JDK 8**。本仓库在 **`deploy/common-java.sh`** 顶部用变量 **`DEPLOY_JDK8`** 写死默认路径(当前为 **`/usr/lib/jvm/java-8-openjdk-amd64`**)。换机器请只改这一处,或通过环境变量临时覆盖:
|
||
|
||
`DEPLOY_JDK8=/你的/jdk8 ./run.sh`
|
||
|
||
**默认**:`run.sh` 使用 **`DEPLOY_JDK8`**,**不跟随** Conda 的 `JAVA_HOME`。
|
||
|
||
- 坚持用当前 Shell 里的 Java(如 Conda JDK17):
|
||
`ELEVATOR_USE_ENV_JAVA=1 ./run.sh`
|
||
非 JDK8 时会自动追加 `--add-opens=...`。
|
||
- 额外 JVM:
|
||
`ELEVATOR_JAVA_OPTS="-Xmx512m" ./run.sh`
|
||
|
||
## 发布包与「星中心」扁平目录对齐
|
||
|
||
执行 `./scripts/release-cw-elevator-application.sh <版本>` 生成的 **`releases/cw-elevator-application-V<版本>.<日期>/`**(日期默认当天 `YYYYMMDD`,可用 **`RELEASE_DATE_LABEL`** 覆盖)除 **`ddl/`** 外,**发布根目录**(与历史运行包 **`cw-elevator-application-V1.0.0.20211103`** 同层习惯)包含:
|
||
|
||
- **`bootstrap.properties`、`application.properties`、`application-access-control.properties`**(与 `deploy/v2-maven/` 同源;与 JAR、`start.sh` 同目录,**不再单独建 `config/`**)。
|
||
- **`start.sh` / `stop.sh`**(对齐现场启停脚本)、**`cw-elevator-application.service`**(`WorkingDirectory`/`ExecStart` 中占位路径默认为 `/path/to/cw-elevator-application`,部署前请替换为实际目录)。
|
||
- **`run.sh`**、**`common-java.sh`**(供 `run.sh` source)。
|
||
- **`collect_elevator_runtime_evidence.sh`**:与仓库根 `scripts/` 同源,置于发布包根目录;现场只读采集进程参数、配置快照、日志关键行、Consul 健康与 KV,输出 `tar.gz`(用法见脚本头注释)。
|
||
|
||
默认还会生成同名 **`releases/cw-elevator-application-V<版本>.<日期>.zip**`;不需要 zip 时:`RELEASE_MAKE_ZIP=0 ./scripts/release-cw-elevator-application.sh <版本>`。
|
||
|
||
## Shell 脚本换行(若出现 `bash\r`)
|
||
|
||
在 Windows 或某些编辑器下保存成 **CRLF** 会导致 `#!/usr/bin/env bash\r`。仓库根已有 **`.editorconfig`** 约束 `*.sh` 使用 **LF**;若再出现可执行:
|
||
|
||
`find . -name '*.sh' -type f -exec sed -i 's/\r$//' {} +`(在 `反编译` 根目录)
|