ProbeDeck

开始

设计哲学

这个项目的取舍和大多数自托管项目不一样。

数据全本地,功能不减

原版必须部署在 Cloudflare 上,因为后端依赖 Workers 运行时和 D1。这带来两个后果:必须绑定 Cloudflare 账户,以及历史数据存在别人的服务器上。

移植版把后端整个换成单容器 Node.js 进程,保留了原版全部功能,只移除了真正依赖 CF 的那部分(CF 用量统计)。

有一件事无法移除:Turnstile 人机验证是 Cloudflare 的服务。如果你要启用,面板所在的机器必须能访问 challenges.cloudflare.com。默认关闭,建议保持关闭。

为什么不重写,而要模拟

重写后端会丢掉两样东西:

  • 主题生态。原版有十年积累的社区主题,重写意味着全部不兼容。
  • 探针协议。已有的探针部署要全部重装。

所以 src/ 保持原样,只在 server/ 加一层运行时适配。这让上游更新时业务代码不用改,只需要检查适配层。

探针是单向的

探针只向面板发起出站连接,不监听任何端口,不接收任何服务器指令。

这意味着:

  • 被监控的机器不必开端口、不必改防火墙
  • 面板被攻破,攻击者也无法从面板对被控机器下发命令
  • 探针升级是「重装」而不是「远程推送」——这是有意的取舍

容器非 root 运行

入口脚本在以 root 启动时先修正数据目录属主,再用 setpriv 降权到 node 用户:

if [ "$(id -u)" = "0" ]; then
  chown -R node:node /app/data 2>/dev/null || true
  exec setpriv --reuid=node --regid=node --init-groups "$@"
fi
bash

主进程只写得了 /app/data 一个目录。以非 root 启动(比如 docker run --user)时直接执行。

内存这件事

面板常驻内存取决于节点数和长连接数,不取决于节点数以外的东西。16 台实测稳态约 87 MB,V8 堆实际只用 17–20 MB。详见性能与占用。

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