修复 install.sh 全新部署无法启动:web 配置块误缩进在 database 段下,默认口令触发启动守卫 #3

Merged
kevin merged 1 commits from dsh/meshtastic_mqtt_server:fix/install-sh-web-block-indent into main 2026-08-21 21:33:04 +08:00
Contributor

问题

install.sh 生成 config.yaml 的 heredoc 中,web: 块缩进与 driver:/sqlite:/mysql: 同级,被 YAML 解析为 database.web。程序只读取顶层 web(rawWebConfig),因此全新部署时:

  1. 整个 Web 配置(含随机生成的 ADMIN_PASSWORD)被静默丢弃
  2. 程序用默认值补全并回写:web.admin.password: admin + host: 0.0.0.0
  3. 触发安全守卫 guardDefaultAdminPassword(非回环监听 + 默认口令)→ 拒绝启动

if [[ ! -f config.yaml ]] 分支每次全新部署都会走到,故必现。

修复

  • web: 块移出 database:,回到顶层(2 空格缩进),随机口令正确落在 web.admin.password
  • 补全 port_enabled / socket_enabled 字段(与生产配置一致,避免首启触发缺字段回写)

验证

  • 用 gopkg.in/yaml.v3(应用同款解析库)渲染并解析修复前后配置:修复前顶层无 web、密码落在 database.web.admin.password;修复后 web 回到顶层
  • 真实二进制以修复后配置启动(非冲突端口 11883/18080 + 临时 SQLite):broker_started + web_started,启动守卫通过
  • bash -n install.sh 语法检查通过
## 问题 install.sh 生成 config.yaml 的 heredoc 中,`web:` 块缩进与 `driver:/sqlite:/mysql:` 同级,被 YAML 解析为 `database.web`。程序只读取**顶层** `web`(rawWebConfig),因此全新部署时: 1. 整个 Web 配置(含随机生成的 ADMIN_PASSWORD)被静默丢弃 2. 程序用默认值补全并回写:`web.admin.password: admin` + `host: 0.0.0.0` 3. 触发安全守卫 guardDefaultAdminPassword(非回环监听 + 默认口令)→ 拒绝启动 `if [[ ! -f config.yaml ]]` 分支每次全新部署都会走到,故必现。 ## 修复 - `web:` 块移出 `database:`,回到顶层(2 空格缩进),随机口令正确落在 `web.admin.password` - 补全 `port_enabled` / `socket_enabled` 字段(与生产配置一致,避免首启触发缺字段回写) ## 验证 - 用 gopkg.in/yaml.v3(应用同款解析库)渲染并解析修复前后配置:修复前顶层无 `web`、密码落在 `database.web.admin.password`;修复后 `web` 回到顶层 - 真实二进制以修复后配置启动(非冲突端口 11883/18080 + 临时 SQLite):`broker_started` + `web_started`,启动守卫通过 - `bash -n install.sh` 语法检查通过
dsh added 1 commit 2026-08-21 21:30:13 +08:00
kevin merged commit 34e50af068 into main 2026-08-21 21:33:04 +08:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: kevin/meshtastic_mqtt_server#3