monitor

配置

登录与安全

面板有两种登录方式:应急密码,以及可选的 GitHub 单点登录。只用应急密码同样完整可用。

配了单点登录也要保留应急密码:GitHub 不可达或 OAuth App 配错时,它是唯一的入口。

应急密码

首次启动时 hub 生成一个 24 位的随机密码。一键脚本装完直接显示在终端里;其他部署方式打印在 hub 的标准输出:

# Docker
docker logs monitor | grep Emergency
# 自己写的 systemd 单元
journalctl -u <单元名> | grep Emergency
bash

在安全页修改,最短 12 位,以 argon2id 哈希存储。改密码会注销所有登录会话,包括正开着的实时推送连接:那条连接里带着各节点的 token,不断开的话,它会比被注销的会话活得更久。

重置应急密码

忘了或没记下来,就重置一个。旧密码立即失效,所有会话被注销,hub 不用重启:

# 一键脚本
sudo ./install-hub.sh --reset-password
# Docker
docker exec monitor /monitor-hub --db /data/monitor.db --reset-password
# 手动部署,数据库路径换成自己的
monitor-hub --db /opt/monitor/data/monitor.db --reset-password
bash

新密码只打印在执行命令的终端里。数据库文件必须已经存在,路径写错时直接报错,不会新建空库。提示 unknown argument 说明 hub 版本太旧,先升级。

GitHub 单点登录

1. 在 GitHub 建一个 OAuth App

Settings → Developer settings → OAuth Apps → New OAuth App

字段填什么
Application name随意,例如 monitor
Homepage URLhttps://hub.example.com
Authorization callback URLhttps://hub.example.com/api/auth/github/callback

回调路径必须是 /api/auth/github/callback。填错时 GitHub 授权照常成功,浏览器也回到了站点,但就是没有登录上。

2. 填进面板

在安全页填 Client ID 和 Client Secret,再填允许登录的 GitHub 用户名,多个用逗号分隔。

用户名列表留空表示拒绝所有人,不是放行所有人。

Client Secret 保存后读不回来,面板只显示「已设置」。授权只申请 read:user。

会话与限流

  • 登录会话 14 天过期。安全页列出所有会话,可以逐个注销
  • 改密码、重置密码、导入备份都会注销全部会话
  • 同一来源地址 15 分钟内密码输错 5 次即锁定,登录成功清零。反代要透传 X-Forwarded-For,否则所有访客共用一个计数,见反向代理

登录不通时

登录页会显示失败原因:

登录页的提示含义
没有设置允许登录的 GitHub 用户用户名列表是空的,空 = 拒绝所有人
GitHub 用户 X 不在允许登录的名单里这个用户名不在列表里
在 GitHub 上取消了授权在 GitHub 授权页上点了拒绝
GitHub 拒绝了这次登录,原因见 hub 日志GitHub 返回了其他错误,例如 OAuth App 被停用
登录已过期,请从登录页重新开始不是从登录页发起的,或者 state cookie 已过期(10 分钟)
GitHub 没有发放令牌,检查 Client Secret 是否正确后重新登录Client ID 或 Client Secret 不对
hub 连不上 GitHub,检查它的网络后重新登录hub 访问不了 github.com 或 api.github.com
GitHub 的回复无法识别,稍后重新登录GitHub 回了内容,但不是预期的格式,多半是临时故障
GitHub 没有返回用户信息(HTTP 状态码),重新登录再试读取 GitHub 用户名时被拒,例如令牌失效或请求被限流
hub 内部出错,详细原因见 hub 日志hub 自己出了错,例如写数据库失败

hub 日志里另外记着 GitHub 的原始回复和用户名列表。任何 GitHub 账号都能走完授权看到登录页的提示,所以这两样只写进日志:

# 一键脚本
journalctl -u monitor-hub -f | grep sign-in
# Docker
docker logs -f monitor 2>&1 | grep sign-in
bash

日志里一条都没有,就是回调路径填错了:请求没有进到 hub 的任何处理逻辑。未匹配的 /api/ 路径返回 404 而不是页面,所以这种错误会直接显示出来。

在 GitHub 上修改这一页最后更新 2026-09-29