运行你自己的网络监控服务器
在 Linux、Windows 或 Docker 主机上安装无界面版,DeviceShelf 就成为一个本地收集器,用于设备发现、在线率/SLA、基础设施健康、服务检查、心跳、告警、报告、API 自动化、Prometheus 和 MCP。与桌面端和移动端同一份许可证。
服务器版能做什么
常驻监控
无界面全天候 24/7 运行,持续盯着你在意的网络——即使你的桌面关机也照样。
在线率与 SLA 跟踪
按设备和服务的每日可用性,支持重试、依赖关系和 CSV 导出。
告警不泛滥
电子邮件/SMTP、ntfy、Gotify 和 webhook——支持按严重程度路由和摘要合并。
公开状态页
一个可选的只读健康页,任何人都能看到——无需登录。
跨子网发现
支持 SNMP 和多网卡,可触及本地网段之外的网络。
问你的 AI(MCP)
把你的实时清单开放给 AI 助手——严格本地、只读、默认关闭。
报告、状态和备份
在线率百分比、每日可用性柱状图、CSV 导出、公开只读状态页,以及配置的导入/导出。
REST API 和 Prometheus
一切都可通过受令牌保护的 API 编程调用,并提供 `/metrics` 供 Grafana 和自动化使用。
Home Assistant
通过 MQTT 把你的设备发布到 Home Assistant。在线状态、厂商和类型,外加自动化可以响应的网络事件。
Docker 最简单
把这段保存为 docker-compose.yml 并运行 docker compose up -d。network_mode: host 让它能看到你的局域网;下面解释这两个 capability。
services:
deviceshelf:
image: ghcr.io/wealthwallet/deviceshelf-server:1.9.12
network_mode: host
cap_add:
- NET_RAW # ARP scan (raw sockets)
- NET_BIND_SERVICE # passive DHCP fingerprinting (UDP/67) → Fingerbank
volumes:
- ./data:/data # chown 10001:10001 ./data
restart: unless-stopped
# optional: environment: { DEVICESHELF_FINGERBANK_KEY: "<free key from fingerbank.org>" }
为什么需要这两个 capability?DeviceShelf Server 部分依靠设备的 DHCP 指纹来识别,并被动监听 UDP 67 端口。由于容器特意以非特权用户(uid 10001)运行,绑定该系统端口需要范围很窄的 NET_BIND_SERVICE——不需要 root,不需要 NET_ADMIN,只是开放低端口而已。没有它,服务器仍会正常启动,只是没有 DHCP/Fingerbank 识别。NET_RAW 用于 ARP 扫描。
Debian / Ubuntu(.deb)
请从终端安装——不要双击。在 Ubuntu 24.04 上,双击 .deb 会在 App Center 中打开,而它对第三方软件包可能会静默失败。终端会解析依赖并启动 deviceshelf-server 服务:
下载 .deb — amd64(Intel/AMD) 下载 .deb — arm64(Raspberry Pi)
sudo apt install ./DeviceShelf-Server-*.deb
在 ARM(Raspberry Pi、ARM 服务器)上,请使用 -arm64.deb 文件。
macOS Server(.pkg)
下载并打开通用安装包。它会把服务器安装为后台 LaunchDaemon,并在登录后保持运行。仪表盘可在端口 8088 访问;更新会保留服务器数据,并先创建一份经过校验的备份。
Windows Server / Windows 11
下载 zip,解压,然后双击 install.bat——确认 Windows 管理员提示(UAC)。它会安装并启动 24/7 服务,然后显示仪表盘 URL 和访问令牌并打开仪表盘。用 uninstall.bat 卸载。
Windows 版本尚未代码签名,因此 Windows 可能会警告:在 SmartScreen 上点击 更多信息 → 仍要运行;如果开启了 Smart App Control,它会完全阻止未签名的应用,直到我们发布签名版本。解压前,你可以右键 zip → 属性 → 勾选 解除锁定。完整细节在 zip 内的 README 中(7 种语言)。被动 DHCP 指纹在 Windows 上不可用;其余一切——扫描、监控、SNMP、告警、仪表盘、API——都包含在内。
首次启动:访问令牌
首次启动时,服务器会在日志中打印一个自动生成的 API 令牌。取出它,然后在端口 8088 打开 Web 界面并粘贴:
# .deb / systemd:
journalctl -u deviceshelf-server | grep -iA1 auto-generated
# Docker:
docker logs deviceshelf-server | grep -iA1 auto-generated
然后在浏览器中打开 http://<host>:8088 并粘贴令牌。
电子邮件通知(SMTP)
在仪表盘的告警设置里,把你自己的邮箱账户添加为发件人。对于常见服务商——Gmail、Yahoo、Outlook/Hotmail、iCloud、GMX 等——把 SMTP 服务器字段留空;DeviceShelf 会自动检测正确的服务器。由于两步验证,Gmail、Yahoo 和 Outlook 需要应用专用密码(在你邮箱账户的安全设置中创建),而不是你的常规密码。对于任何其他或自托管的服务商,请填写 SMTP 服务器、端口和安全方式。告警随后会通过你的账户发送给你列出的收件人。
外部看门狗
DeviceShelf 的所有告警都在你自己的机器上发出,所以当出问题的正是这台机器时——断电、崩溃、线路中断——一条也送不到你手上。外部看门狗正是为这种情况准备的。在设置 → 外部看门狗中粘贴某个监控服务的心跳网址,DeviceShelf 每 60 秒发送一次心跳;一旦心跳中断,那个服务就会通知你。可以用 Healthchecks.io、UptimeRobot(Heartbeat 监控)、Better Stack、Cronitor,或者你自建的接收端——它们的免费额度都足够一个家庭网络使用。把那边的宽限时间设为心跳间隔的三倍左右,再按一次发送测试心跳确认线路通畅。
这项服务我们刻意不自己运营。看门狗必须比它监视的对象更可靠,而且必须待在你的网络之外——这与 DeviceShelf 的设计初衷正好相反。
就你的网络问你的 AI MCP
服务器可以通过 Model Context Protocol 把你的实时清单开放给 AI 助手——于是你可以问 「现在有什么在线?」、「哪些证书快到期了?」或「什么有漏洞?」,并从你自己的数据中得到答案。它严格本地:端点在你的服务器内运行,受同一个令牌保护,只能在你的局域网内访问——没有 DeviceShelf 云连接器。默认关闭、只读,并包含在你的许可证中(试用期也能用)。
# enable in /etc/deviceshelf/server.env (or your Docker env):
DEVICESHELF_MCP_ENABLE=true
# then point Claude Desktop at it via the mcp-remote bridge:
# http://<host>:8088/mcp (Authorization: Bearer <your-token>)
完整的工具列表和设置见公告。写操作(重命名设备、确认告警、触发扫描)保持关闭,除非你明确选择开启。
连接你的 AI 代理 MCP
先启用 MCP(见上),然后用你的 API 令牌把 AI 客户端指向服务器的 /mcp 端点。替换下面的 <host> 和 <token>。大多数客户端原生支持 Streamable HTTP:
Claude Code
claude mcp add --transport http deviceshelf http://<host>:8088/mcp \
--header "Authorization: Bearer <token>"
Cursor — ~/.cursor/mcp.json
{ "mcpServers": { "deviceshelf": {
"url": "http://<host>:8088/mcp",
"headers": { "Authorization": "Bearer <token>" }
} } }
VS Code (Copilot agent) — .vscode/mcp.json
{ "servers": { "deviceshelf": {
"type": "http",
"url": "http://<host>:8088/mcp",
"headers": { "Authorization": "Bearer <token>" }
} } }
Windsurf — ~/.codeium/windsurf/mcp_config.json (note: serverUrl)
{ "mcpServers": { "deviceshelf": {
"serverUrl": "http://<host>:8088/mcp",
"headers": { "Authorization": "Bearer <token>" }
} } }
Cline — cline_mcp_settings.json ("type": "streamableHttp" is required, else it falls back to SSE and fails)
{ "mcpServers": { "deviceshelf": {
"type": "streamableHttp",
"url": "http://<host>:8088/mcp",
"headers": { "Authorization": "Bearer <token>" }
} } }
Gemini CLI — ~/.gemini/settings.json (note: httpUrl)
{ "mcpServers": { "deviceshelf": {
"httpUrl": "http://<host>:8088/mcp",
"headers": { "Authorization": "Bearer <token>" }
} } }
Claude Desktop — claude_desktop_config.json. It has no native static-token remote support, so bridge it with mcp-remote (keep --allow-http for plain http; the token goes in an env var to avoid a Windows arg-quoting bug). Fully quit and relaunch after saving.
{ "mcpServers": { "deviceshelf": {
"command": "npx",
"args": ["-y", "mcp-remote", "http://<host>:8088/mcp",
"--transport", "http-only", "--allow-http",
"--header", "Authorization:${AUTH}"],
"env": { "AUTH": "Bearer <token>" }
} } }
ChatGPT 连接器运行在 OpenAI 的云端,无法直接访问局域网服务器。要使用它们,请把服务器放在一个公开的 HTTPS 隧道后面(OpenAI 的 Secure MCP Tunnel、ngrok 或 Cloudflare Tunnel),让它拥有一个 https://…/mcp 地址。若想严格本地,请优先使用上面的客户端。