帮助

常见问题和容易踩到的坑。如果这里没有答案,欢迎写信给我们,地址在页面底部。

入门

代理服务器要多少钱?

不要钱。它是免费的,设备、消息、订阅和服务器的数量都不受限制,不需要许可证密钥,也不收集遥测数据。

支持哪些系统?

Debian 和 Ubuntu(APT 仓库中的软件包)、Windows 10 与 11 x64(现成的 .exe),以及面向 amd64、arm64 和 armhf 的 Linux 构建,可在任何发行版(包括 Raspberry Pi)上手动运行。

还需要另外安装什么吗?

什么都不用。可执行文件是静态链接的,不需要运行时,不需要 libc,也不需要外部数据库:状态就保存在代理服务器内部的纯 Go SQLite 中。

装好之后去哪里?

控制台在 http://你的服务器:8567 等着你。默认账号是 admin,密码 admin——首次登录后请立刻在「个人设置」里更改。

默认开放哪些端口?

1883 用于 TCP 上的 MQTT,8883 用于 TLS 上的 MQTT,8567 用于 Web 控制台以及 /mqtt 路径下 WebSocket 上的 MQTT。端口可在 config.json 或命令行选项中修改。

连接设备

设备连不上,提示「not authorized」,是哪里不对?

多半是用了控制台管理员的账号。两者是不同的东西:管理员只管理 Web 界面,而设备要用「用户」页面里创建的独立账号连接。请在那里创建一个用户,并用该名称和密码连接。

客户端连上了,却看不到消息。

请检查权限。ACL 默认一律拒绝,没有明确的允许规则就没有访问权。请确认该用户针对相应的主题过滤器有一条 read 或 readwrite 的规则,并且它排在拒绝规则之前——规则自上而下检查,命中第一条即生效。

怎样只让设备访问自己的分支?

添加一条过滤器为 $u/#、访问方式为 readwrite 的规则。$u 会展开为已连接客户端的名称,所以一条规则适用于所有人:每台设备只看得到自己的分支。控制台里为此设有「自己的分支」按钮。

可以允许匿名访问吗?

可以,在「设置 → 代理服务器」里有单独的开关。请注意,匿名客户端被拒绝访问整个 $ 命名空间,包括 $SYS。

为什么订阅 # 看不到 $SYS?

这是规范的要求:通配符不会触及以 $ 开头的主题。要读取统计数据,需要一条像 $SYS/# 这样的明确规则。代理服务器的设置里还有一个 $SYS 的全局开关。

怎样从浏览器连接?

使用 WebSocket 上的 MQTT:地址为 ws://你的服务器:8567/mqtt,子协议为 mqtt。不需要额外的网关——WebSocket 与控制台在同一个端口上工作。

安全与 TLS

连接 8883 时客户端提示证书有问题。

首次启动时代理服务器会生成自签名证书,用于测试没问题,但客户端并不信任它。用于生产系统时,请在配置的 tls 部分(cert 和 key 两项)填入你自己的证书,然后重启代理服务器。

怎样修改管理员密码?

在「个人设置」里修改。新密码会以哈希形式写入 config.json——文件中不会留下明文密码。

我忘了管理员密码。

停止代理服务器,从 config.json 的 auth 部分删除 passwordHash 字段,改为写入 "password": "你的新密码"。下次启动时代理服务器会计算哈希,并把明文从文件中抹去。

控制台能从互联网访问,这样可以吗?

Linux 上的标准安装会让控制台只监听 127.0.0.1,并经由 nginx 发布,在那里加上 HTTPS 和访问限制都很容易。把 8567 端口直接暴露出去并不明智。

怎样给另一个系统开放 API 访问?

在「设置 → API」里创建一个 Bearer 令牌。它只显示一次,保存的只有哈希。如果对方只需要统计数据,请勾选「只读」:这样就只有 GET、HEAD 和 OPTIONS 能通过。

负载与可靠性

有台设备在用消息淹没代理服务器,怎么办?

在「设置 → 代理服务器」里打开限流:每秒消息数、突发量、每秒字节数。它们按连接生效。超出限制既不会断开连接,也不会丢消息——代理服务器会放慢读取套接字,发送方自己就收敛了。

某个主题很吵,但客户端整体没问题。

这正是「规则 → 主题限流」的用武之地。按模式设置的规则可以把数据流稀释到指定频率并保留最新值,或者把该主题整条丢弃。每秒发十次的传感器会变成每秒一条,而且是最新的读数。

代理服务器重启后哪些内容还在?

保留消息、带订阅和离线队列的持久会话、未完成的 QoS 握手,以及延迟消息。清理会话不会保存——按规范,它们随连接一起消失。

支持集群吗?

不支持。这款代理服务器按单进程设计。要把多台代理服务器连起来,可以使用桥接,在服务器之间双向转发主题。

怎样查看此刻正在发生什么?

「流量」页面提供消息和代理事件的实时数据流,可过滤、可暂停;「概览」页面则有速率曲线、机器健康状况和事件流。数据通过 WebSocket 推送。

维护

在 Debian 或 Ubuntu 上怎样更新代理服务器?

随系统一起更新即可:sudo apt-get update && sudo apt-get upgrade。不需要别的操作,设置和数据都会原样保留。

怎样把配置迁移到另一台服务器?

使用「设置 → 导入与导出」:在旧服务器上下载文件,在新服务器上上传。设置、用户和规则都会一并转移。

数据和日志在哪里?

数据在可执行文件旁边的 data 目录里(Linux 上是 /opt/elxmqttbroker):broker.db、users.json 和证书。Linux 上日志写入 journald:journalctl -u elxmqttbroker -f。

怎样确认正在运行的版本?

版本号、构建编号和构建时间都写进了可执行文件:可在侧边栏底部、「关于」页面,以及运行 elxmqttbroker -version 时看到。

可以关闭状态持久化吗?

可以,在 config.json 中设置 persistence: false。此时一切只保存在内存里,重启即丢——用于测试环境是合理的选择。

没有找到答案?

写信给我们吧——我们会尽力帮忙,也会继续充实这一部分。

serjaru@gmail.com 查阅文档