2026-09-04 00:37:21 +08:00
2026-09-04 00:37:21 +08:00
2026-09-04 00:37:21 +08:00
2026-09-04 00:37:21 +08:00
2026-09-04 00:37:21 +08:00
2026-09-04 00:37:21 +08:00
2026-09-04 00:37:21 +08:00
2026-08-11 13:02:14 +08:00
2026-09-04 00:37:21 +08:00
2026-09-04 00:37:21 +08:00
2026-09-04 00:37:21 +08:00

NodeFlare

NodeFlare 是一个自部署的服务器监控面板。服务端使用 Rust/Axum,通过 WebSocket 接收 Agent 指标并实时推送到浏览器,数据库可选 SQLite 或 PostgreSQL。

当前版本不依赖 Cloudflare Workers、D1 或 Durable Objects。Cloudflare Turnstile 仅作为可选的人机验证功能。

快速开始

需要稳定版 Rust、Bun 1.4+,以及常见的 C/C++ 构建工具。

cp backend/config.example.toml backend/config.toml
$EDITOR backend/config.toml
./start.sh

必须先替换示例中的 admin_password 占位值,否则服务会拒绝启动。start.sh 会安装尚未安装的前端依赖、构建公开页和管理页、编译后端,然后监听配置的地址。

默认可从 http://127.0.0.1:8080 访问公开面板,管理页位于 /admin。首次登录后可在“登录与安全”中启用 TOTP 两步验证。

配置

配置项是扁平 TOML 字段,路径均相对于配置文件所在目录解析。完整模板见 backend/config.example.toml。

SQLite 示例:

database_url = "sqlite://nodeflare.db"
bind_addr = "127.0.0.1:8080"
admin_username = "admin"
admin_password = "replace-with-a-long-random-password"

PostgreSQL 示例:

database_url = "postgres://nodeflare:password@127.0.0.1/nodeflare"
bind_addr = "127.0.0.1:8080"
admin_username = "admin"
admin_password = "replace-with-a-long-random-password"

两种数据库都会在启动时自动执行对应迁移。修改 database_url 只会初始化新数据库,不会自动搬运另一数据库中的现有数据。

Turnstile 默认关闭。需要时同时填写 turnstile_site_key 和 turnstile_secret_key,再从管理页开启公开面板或管理员登录保护;两项留空即可完全禁用。

部署 Agent

在管理页创建节点后,复制对应平台的安装命令。Agent 的服务地址应是浏览器能够访问的 NodeFlare HTTPS 地址,例如:

curl -fsSL https://raw.githubusercontent.com/imengying/NodeFlare/main/agent/agent.sh \
  | sudo sh -s -- -e 'https://monitor.example.com' -t 'your-agent-token'

Agent 通过 /api/agent/ws 建立 WebSocket 连接。除 localhost 调试外,安装脚本要求 HTTPS。

开发与构建

# 构建静态前端并启动 debug 后端
./dev.sh

# 单独运行 Vite;API 和 WebSocket 会代理到 127.0.0.1:8080
bun run dev:frontend

# 构建公开页、管理页和 release 后端
bun run build

# 构建 Agent
bun run build:agent

运行测试:

cargo test --locked --manifest-path backend/Cargo.toml
cargo test --locked --manifest-path agent/Cargo.toml
bun test --cwd frontend

烟雾测试需要一个已经运行的 NodeFlare 实例,以及 curl、jq、Bun 和 Node.js:

MONITOR_BASE_URL=http://127.0.0.1:8080 \
MONITOR_ADMIN_USERNAME=admin \
MONITOR_ADMIN_PASSWORD='your-password' \
sh scripts/smoke-test.sh

HTTPS 与反向代理

生产环境建议让 NodeFlare 只监听回环地址,由 Nginx、Caddy 或同类反向代理终止 TLS。反向代理必须保留 Host、协议和 WebSocket Upgrade 头。Nginx 示例:

map $http_upgrade $connection_upgrade {
    default upgrade;
    '' close;
}

server {
    listen 443 ssl;
    server_name monitor.example.com;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
    }
}

X-Forwarded-Proto: https 也用于给管理员会话 Cookie 添加 Secure。NodeFlare 自身会为 API 和静态资源添加 CSP、禁止 iframe、MIME 嗅探限制等安全响应头。

备份

SQLite 默认文件是 backend/nodeflare.db。可在服务运行时使用 SQLite 的一致性备份命令:

sqlite3 backend/nodeflare.db ".backup '/var/backups/nodeflare.db'"

PostgreSQL 使用标准工具:

pg_dump --format=custom --file=/var/backups/nodeflare.dump \
  'postgres://nodeflare:password@127.0.0.1/nodeflare'

恢复前请停止 NodeFlare,并先在独立环境验证备份。配置文件包含管理员初始凭据和可选的 Turnstile 密钥,也应通过权限受控的方式单独备份。

架构

  • 后端:Rust、Axum、SQLx
  • 数据库:SQLite 或 PostgreSQL
  • 前端:React、TypeScript、Vite
  • 实时通信:浏览器 /api/ws,Agent /api/agent/ws
  • 认证:数据库中的不透明会话令牌,可选 TOTP 两步验证

License

MIT

S
Description
NodeFlare 是一款轻量级的自托管服务器监控面板,通过 Web 界面查看服务器状态,并由轻量级 Agent 采集数据上报。
https://elysia62.github.io/NodeFlareWiki/demo
Readme MIT
2 MiB
0 Stars 1 Watchers 0 Forks
Languages
Rust 51.3%
TypeScript 30%
Shell 7.3%
CSS 5.7%
JavaScript 3.1%
Other 2.5%