站外存活监测
external-monitor 是独立 Python 探针,不依赖 Halo 或 Insight 进程。仅安装插件不会自动启动探针;请把它部署到另一台服务器,同主机的另一个容器无法覆盖主机宕机。
探针检查公开页面,不需要 Halo 管理员账号或密码。通知也应使用独立于 Halo 的 Webhook 或 SMTP 渠道。
Docker 部署
从源码仓库获取 external-monitor 目录,复制到独立服务器。在该目录执行:
最小 Webhook 配置示例:
域名和密钥均为占位值,请替换后再启动。.env 含有渠道凭据,不要提交到代码仓库或分享到反馈记录。
目标地址怎么选
MONITOR_URL 应使用最终 HTTPS 地址,探针不跟随重定向,默认期望 2xx。EXPECTED_TEXT 可检查响应前 64 KiB 中的特征文字,帮助识别返回 200 的代理错误页。
站点首页可能被 CDN 缓存,建议选择能反映源站状态的专用公开地址。确实需要 HTTP 的环境可设 ALLOW_HTTP=true;HTTPS 始终验证证书。
邮件渠道
不用 Webhook 时,可填写完整 SMTP 配置:
独立探针的 SMTP 使用 STARTTLS,默认端口 587。它的配置与插件内通知设置分别维护,不能把插件内的 465 SMTPS 设置直接照搬到探针。
触发与恢复
默认每 30 秒检查一次,单次超时 5 秒。连续失败 3 次生成宕机事件,连续成功 2 次生成恢复事件;同一宕机期间不重复生成告警。
通知保存在探针自己的 SQLite 中,失败指数退避,最多尝试 5 次,重启后继续重试。Webhook 带 X-Insight-Event-Id 可用于去重;设置 WEBHOOK_SECRET 后,还带 X-Insight-Signature(SHA-256 HMAC)。
发送线程独立于检查线程,慢渠道不会推迟存活检查。新状态替代旧的待重试消息,但无法撤回已在发送的消息。网络中断时可能重复投递,成功也不代表收件人已经阅读。
查看与停止
探针每 5 分钟输出一次状态,状态变化和发送失败会立即记录。Compose 中的 probe-data 卷保存事件与投递记录,重建容器时保留该卷才能继续使用历史状态。