diff --git a/deploy/local/launchctl/README.md b/deploy/local/launchctl/README.md
index b1f55fa0..dd8fd30d 100644
--- a/deploy/local/launchctl/README.md
+++ b/deploy/local/launchctl/README.md
@@ -3,7 +3,7 @@
本目录用于把本机 32960/JT808/history 三个服务的启动方式仓库化。模板面向当前生产验证链路:
- `gb32960-ingest-app`: TCP `32960`,HTTP `20100`
-- `jt808-ingest-app`: TCP `808`,HTTP `20482`
+- `jt808-ingest-app`: TCP `808`,HTTP `20400`
- `vehicle-history-app`: HTTP `20200`
`vehicle-history-app` 的热历史查询只依赖 Kafka 与 TDengine:RAW 帧的 `parsedJson`、`metadataJson`、`rawUri` 已进入 TDengine `raw_frames`。GB32960/JT808 接入服务可以继续保留 `SINK_ARCHIVE_PATH` 作为原始 `.bin` 冷备,history 本机模板不再要求共享 archive root。
@@ -84,12 +84,12 @@ launchctl bootout "gui/$(id -u)" "$HOME/Library/LaunchAgents/com.lingniu.vehicle
```bash
curl -sS http://127.0.0.1:20100/actuator/health
-curl -sS http://127.0.0.1:20482/actuator/health
+curl -sS http://127.0.0.1:20400/actuator/health
curl -sS http://127.0.0.1:20200/actuator/health
```
Swagger:
- GB32960 ingest: `http://127.0.0.1:20100/swagger-ui/index.html`
-- JT808 ingest: `http://127.0.0.1:20482/swagger-ui/index.html`
+- JT808 ingest: `http://127.0.0.1:20400/swagger-ui/index.html`
- History query: `http://127.0.0.1:20200/swagger-ui/index.html`
diff --git a/deploy/local/launchctl/com.lingniu.jt808.plist.template b/deploy/local/launchctl/com.lingniu.jt808.plist.template
index e8b65f25..48cba65e 100644
--- a/deploy/local/launchctl/com.lingniu.jt808.plist.template
+++ b/deploy/local/launchctl/com.lingniu.jt808.plist.template
@@ -15,7 +15,7 @@
EnvironmentVariables
HTTP_PORT
- 20482
+ 20400
JT808_PORT
808
KAFKA_ENABLED
diff --git a/modules/apps/vehicle-history-app/src/test/java/com/lingniu/ingest/historyapp/PortainerComposeResourceLimitsTest.java b/modules/apps/vehicle-history-app/src/test/java/com/lingniu/ingest/historyapp/PortainerComposeResourceLimitsTest.java
index f31097ea..7d5084f8 100644
--- a/modules/apps/vehicle-history-app/src/test/java/com/lingniu/ingest/historyapp/PortainerComposeResourceLimitsTest.java
+++ b/modules/apps/vehicle-history-app/src/test/java/com/lingniu/ingest/historyapp/PortainerComposeResourceLimitsTest.java
@@ -107,6 +107,22 @@ class PortainerComposeResourceLimitsTest {
.doesNotContain("/api/event-history/records");
}
+ @Test
+ void localLaunchctlJt808UsesCurrentHttpPort() throws IOException {
+ Path launchctl = repositoryRoot().resolve("deploy/local/launchctl");
+ String jt808Template = Files.readString(launchctl.resolve("com.lingniu.jt808.plist.template"));
+ String readme = Files.readString(launchctl.resolve("README.md"));
+
+ assertThat(jt808Template)
+ .contains("HTTP_PORT\n 20400")
+ .doesNotContain("20482");
+ assertThat(readme)
+ .contains("`jt808-ingest-app`: TCP `808`,HTTP `20400`")
+ .contains("curl -sS http://127.0.0.1:20400/actuator/health")
+ .contains("JT808 ingest: `http://127.0.0.1:20400/swagger-ui/index.html`")
+ .doesNotContain("20482");
+ }
+
@Test
void operationRunbooksDescribeTdengineRawJsonHotPath() throws IOException {
Path operations = repositoryRoot().resolve("docs/operations");