diff --git a/deploy/local/launchctl/README.md b/deploy/local/launchctl/README.md index 08b4cd8f..49ce0487 100644 --- a/deploy/local/launchctl/README.md +++ b/deploy/local/launchctl/README.md @@ -39,6 +39,12 @@ export YUTONG_MQTT_URI='' export YUTONG_MQTT_TOPIC='#' export YUTONG_MQTT_USERNAME='' export YUTONG_MQTT_PASSWORD='' +export YUTONG_MQTT_KEEP_ALIVE_SECONDS='20' +export YUTONG_MQTT_CONNECTION_TIMEOUT_SECONDS='10' +export YUTONG_MQTT_TLS_CA_PEM='' +export YUTONG_MQTT_TLS_CLIENT_PEM='' +export YUTONG_MQTT_TLS_CLIENT_KEY='' +export YUTONG_MQTT_TLS_HOSTNAME_VERIFICATION_ENABLED='true' mkdir -p "$HOME/Library/LaunchAgents" "$PROJECT_ROOT/data" mkdir -p /tmp/lingniu-gb32960-live /tmp/lingniu-jt808-live /tmp/lingniu-yutong-mqtt-live /tmp/lingniu-vehicle-history-live /tmp/lingniu-vehicle-analytics-live @@ -46,7 +52,7 @@ mkdir -p /tmp/lingniu-gb32960-live /tmp/lingniu-jt808-live /tmp/lingniu-yutong-m python3 deploy/local/launchctl/render.py ``` -渲染脚本固定生成 `gb32960 jt808 yutong-mqtt vehicle-history vehicle-analytics` 五个 plist,并会对密码、JDBC URL、MQTT topic 中的 XML 特殊字符做转义,避免 `#`、`&` 等字符破坏 plist。 +渲染脚本固定生成 `gb32960 jt808 yutong-mqtt vehicle-history vehicle-analytics` 五个 plist,并会对密码、JDBC URL、MQTT topic、keepAlive、连接超时和 TLS PEM 参数中的 XML 特殊字符做转义,避免 `#`、`&` 等字符破坏 plist。 如果生产配置由 Nacos 下发,可以把模板里的 `NACOS_CONFIG_ENABLED` 改成 `true`,并补充 `NACOS_SERVER_ADDR`、`NACOS_NAMESPACE`、`NACOS_GROUP`、`NACOS_USERNAME`、`NACOS_PASSWORD`。端口、Kafka topic、接入服务冷备 archive 路径、TDengine 连接建议仍保留为启动环境变量,便于 Portainer、launchctl 和临时压测保持一致。 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 5d05da7c..d92fa52e 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 @@ -133,6 +133,21 @@ class PortainerComposeResourceLimitsTest { } } + @Test + void localLaunchctlReadmeDocumentsYutongMqttProductionTuning() throws IOException { + String readme = Files.readString(repositoryRoot() + .resolve("deploy/local/launchctl/README.md")); + + assertThat(readme) + .contains("export YUTONG_MQTT_KEEP_ALIVE_SECONDS='20'") + .contains("export YUTONG_MQTT_CONNECTION_TIMEOUT_SECONDS='10'") + .contains("export YUTONG_MQTT_TLS_CA_PEM=''") + .contains("export YUTONG_MQTT_TLS_CLIENT_PEM=''") + .contains("export YUTONG_MQTT_TLS_CLIENT_KEY=''") + .contains("export YUTONG_MQTT_TLS_HOSTNAME_VERIFICATION_ENABLED='true'") + .contains("keepAlive、连接超时和 TLS PEM 参数"); + } + @Test void localLaunchctlTemplatesCoverActiveProductionApps() throws IOException { Path launchctl = repositoryRoot().resolve("deploy/local/launchctl");