嵌入式开发 · 传感器应用 · 物联网通信 · 学习与作品记录

← 返回笔记列表

部署形态定案:局域网先行,公网分阶段

后端和家属端到底跑在哪,这个决定会影响端口、证书、鉴权三件事。讨论下来定了两阶段:首轮局域网,第二阶段公网。

首轮为什么先在局域网

  • 开发周期短:不用等域名、不用等备案、不用配证书;
  • 故障面小:排错时不用区分「是代码问题还是网络问题」;
  • 设备侧不变:ESP32 连本机 Broker 和连云端 Broker,固件逻辑完全一致,只改地址。

第二阶段为什么要上公网

答辩评委不会坐到你家的 Wi-Fi 里。家属端要能被任意网络访问,设备端要能连出去。

阶段设备端家属端证书
首轮(局域网)mqtt://192.168.x.x:1883http://192.168.x.x无
第二阶段(公网)mqtts://域名:8883https://域名 + wssLet's Encrypt

三个明确不采用的方案

方案为什么不选
内网穿透(frp / ngrok)多一层转发,答辩当天多一个可能挂掉的环节;且免费版限速、限连接数
托管 MQTT(EMQX Cloud 等)免费层有连接数/消息量限制,答辩期间被限流不可接受;且要额外处理托管 Broker 的鉴权
自签证书自签则每台设备都要装根证书,漏装一台就静默连不上;Let's Encrypt 免费且可自动续期。(2026-10 更正:LE 自 2026-01-15 起也签发 IP 证书,只是强制 6 天档;此前「LE 不签 IP 证书」的说法已失效)

双轨回退

最坏情况是:公网环境当天出问题。所以本地档常备不删,随时可以退回局域网演示。这条不是可选项,是验收项——「云端不可达时本地仍能端到端演示」必须提前验证。

三个「只有一个」

  • 一个域名:设备连它、家属端连它、证书签它;
    备案期间 改用裸 IP 顶班(IP 证书 + mqtts://<IP>:8883),备案后只改 host 一处;
  • 一张证书:nginx 的 443 和 Mosquitto 的 8883 用同一张;
  • 一个源:前端与 API 同域,没有跨域问题。

端口只开三个

端口用途来源限制
443/TCP家属端 https + wss0.0.0.0/0
8883/TCP设备 mqtts0.0.0.0/0(家庭宽带 IP 会变,不锁)
22/TCPSSH 运维仅自己的 IP 段

后端只监听 127.0.0.1:3000,不对外开;明文 1883 在云端不提供入口。

8883 上跑什么主题、账号权限怎么分,见MQTT 主题表设计。