
Flutter Server Box 深度指南跨平台服务器状态监控与运维工具箱【免费下载链接】flutter_server_boxServerBox - server status toolbox项目地址: https://gitcode.com/GitHub_Trending/fl/flutter_server_box导读Flutter Server BoxServerBox是一个基于 Flutter 开发的服务器状态监控与运维工具箱为 Linux、BSD 与 Windows 服务器提供可视化状态图表与 SSH/SFTP 管理能力覆盖 iOS、Android、macOS、Linux、Windows 五大桌面与移动平台。本文以仓库根目录 README.md 为主线结合 monitor 服务端 agent、配置示例、Makefile 与 pubspec.yaml 等仓库证据系统讲解其功能矩阵、各平台安装方式、Monitor agent 的部署与安全配置、双通道SSH 与 HTTP接入模型以及从源码构建开发的完整流程帮助读者在几分钟内完成从安装到生产级部署的全过程。项目是什么一份直白的定位README 对它的定义只有一句话A Flutter project which provides charts to display Linux, Unix and Windows server status and tools to manage servers.一个用 Flutter 开发的、为 Linux/Unix/Windows 服务器提供状态图表与管理工具的 Flutter 项目。把这句话拆开对应的是项目里两条核心能力线看状态CPU、传感器、GPU、磁盘、网络等指标的实时图表以及 S.M.A.R.T. 硬盘健康信息管服务器SSH 终端、SFTP 文件传输、Docker 容器管理、进程管理与 systemd 服务管理、命令片段snippets。在技术实现上ServerBox 与大多数远程 SSH 客户端 图表工具的最大区别在于其共享解析器架构App 端与 Monitor agent 共用同一套 Rust 状态解析逻辑。从 crates/sbm_parser 的目录结构看它同时维护着 linux/bsd/windows 三套命令清单与解析器linux.rs、bsd.rs、windows.rs、script.rs并由 crates/sbm_ffi 通过 flutter_rust_bridge 以 FFI 方式编入 App由 crates/sbm_native 在 Monitor agent 侧原生采样。App 与 agent 对同一条服务器输出给出完全一致的解读这正是图表数据可信度的来源。功能矩阵从图表到终端再到平台能力README 的 Features 一节概括了三组能力仓库源码lib/ 与 monitor/为其提供了完整佐证核心监控与管理能力能力说明仓库证据状态图表CPU、传感器sensors、GPU 等指标实时曲线含历史数据crates/sbm_parser/src 多平台解析器监控周期在 monitor/config.example.toml 中由interval_seconds控制SSH 终端全功能终端模拟基于 vendored 的 xterm.dart依赖声明见 pubspec.yamlxterm: path: packages/xtermSFTP文件浏览、上传下载与编辑底层协议实现见 lib/data/ssh 与 packages/dartssh2容器 / 进程 / 服务管理Docker 容器、进程列表、systemd 服务操作monitor 的POST /api/v1/exec端点承载对应命令S.M.A.R.T.硬盘健康状态读取由 monitor 扩展采集周期获取需要smartctl基准测试内置 yabs 基准脚本执行与结果解析assets/yabs.b64由 scripts/update-yabs.sh 更新运行前经 base64 内嵌平台特性生物认证App 解锁可配置指纹/面容验证推送通知服务器告警通过 Monitor agent 推送到手机桌面小组件Home Widget与 watchOS App不打开 App 也能看到服务器状态跟随系统颜色亮/暗色主题与系统设置联动。16 种语言README 明确指出当前支持 16 种语言清单见 lib/l10n/与仓库实际文件一一对应阿塞拜疆语、德语、英语、西班牙语、法语、印尼语、意大利语、日语、韩语、荷兰语、葡萄牙语、俄语、土耳其语、乌克兰语、简体中文、繁体中文app_az.arb至app_zh_tw.arb共 16 个 ARB 文件。译者信息记录在该目录的 git 历史中。安装与下载按平台各取所需README 的安装表格给出了每个平台的官方渠道并特别提示只从可信来源下载软件包。平台渠道与注意事项iOSApp Store或 GitHub Release 中的_NoSign.ipa未签名需自行签名后安装适合无法访问 App Store 的地区或侧载场景macOSApp Store仅支持 Apple siliconGitHub Release 按架构提供.dmg或brew install --cask server-boxAndroidGitHub Release / 项目 CDN 包仓库 / F-Droid / OpenAPKLinux / WindowsGitHub Release / 项目 CDN 包仓库从发布脚本看各平台产物由fl_build统一命名pubspec.yaml 中fl_build.appName: ServerBoxmacOS 侧通过 scripts/release/release-macos-dmg.sh 与 scripts/release/package-dmg-from-xcarchive.sh 生成按架构区分的 DMG。架构视角一个 monorepo两条接入通道.claude/skills/serverbox-onboarding/SKILL.md 将仓库组织方式描述为 monorepo各目录职责如下路径职责lib/Flutter App 本体页面、Provider、Store、SSH 客户端crates/sbm_parser共享状态解析器命令清单与解析逻辑的唯一事实来源App 经 FFI 与 Monitor 共用crates/sbm_ffiflutter_rust_bridge 绑定 crate由 hook/rust_build_environment.dart 在构建时编译进 Appcrates/sbm_native仅 Monitor 使用的原生逐平台采样器monitor/ServerBox Monitor部署在服务器上的 Rust agent 及其 Svelte 网页面板packages/以路径依赖方式引用的 vendored Dart 分支dartssh2、xterm、fl_lib 等docs/Astro Starlight 文档站英文与中文镜像两种接入方式SSH 与 Monitor HTTP一台服务器在 App 中可以按两种方式添加SSH 方式App 直接以 SSH 连接服务器适合愿意暴露 SSH 端口、需要终端与 SFTP 的场景Monitoragent方式服务器上安装 Monitor agentApp 通过其 HTTP API 访问不携带任何 SSH 凭据。它是不方便暴露 SSH 端口的主机的第二选择且由于 agent 独立采集并落库图表在 App 首次连接之前就有历史数据。SKILL.md 明确说明每条已配置的传输通道各自贡献能力并指出一个典型现象终端按钮消失了通常是 agent 的能力模型问题而不是 bug——App 只展示 agent 在GET /api/v1/capabilities上声明接受的功能。存储与状态本地数据库App 使用 SQLite 存储且在 pubspec.yaml 中通过hooks.user_defines.sqlite3.source: sqlite3mc将编译进 App 的 SQLite 替换为SQLite3MultipleCipherssqlite3mc整文件加密含 key 与索引且不依赖平台安装 OpenSSL状态管理Riverpodflutter_riverpod/riverpod/riverpod_annotation见 pubspec.yaml数据层由lib/data/provider/与lib/data/store/承载。ServerBox Monitor让App 关闭时也持续工作README 的 Help 一节给出了 Monitor 的定位它是安装在你服务器上的 agent。不打开 ServerBox App 时仍需工作的功能都依赖它——推送服务、桌面小部件和手表 App。除此之外它同时是第二种添加服务器的方式HTTP 访问、历史数据的采集者以及自带网页面板的独立服务。安装与运行Monitor 的完整安装说明见 monitor/README.md 与 monitor/README_zh.md。安装脚本 monitor/install.sh 支持install、uninstall、upgrade三个命令和--user、--system两种模式并自动检测 systemd 与 OpenRC 两类 init 系统# 方式一从本仓库 checkout 直接执行与远程管道安装等价 ./install.sh install # systemd以当前账号安装 systemctl --user 服务 sudo ./install.sh install # OpenRC (Alpine)写 /etc/init.d 需要 root # 但 agent 仍以你 sudo 前的账号运行 sudo ./install.sh install --system # 两种 init 系统下均以 root 运行 # 方式二离线 / 未发布构建 SBM_INSTALL_PKG/path/to/server-box-monitor ./install.sh install安装脚本的设计有几个值得注意的安全取舍均来自 monitor/install.sh 源码注释默认以普通账号运行--user模式下安装systemctl --user服务~/.config/systemd/user/server_box_monitor.service并尝试loginctl enable-linger防止登出后服务停止OpenRC 下则通过command_user指定运行账号。脚本明确拒绝在 root 下静默安装 user 服务也拒绝在 NixOS 上硬装 system 服务NixOS 的/etc/systemd/system位于只读 store应改用 monitor/nix/module.nix 模块校验下载包自动下载最新monitor-v*release并用官方发布的 SHA256SUMS 校验防止供应链篡改生成随机密钥首次安装时从/dev/urandom生成JWT_SECRET写入~/.local/share/server-box-monitor/.env0600 权限agent 默认监听0.0.0.0:3770当frontend/dist存在时在同一地址提供网页面板。配置文件config.toml 逐项解读Monitor 的配置为二进制旁的config.tomlTOML 格式所有键与注释都收录在 monitor/config.example.toml升级后应复查该文件因为不同 release 之间可能调整配置格式。执行cargo run -- config可打印解析后的实际值。核心配置项如下配置段键默认值说明顶层database_urlsqlite:serverbox_monitor.db指标与告警的 SQLite 数据库顶层jwt_secret首次启动自动生成面板鉴权密钥显式设置时至少 32 字符持久化于数据库旁的jwt.secret0600[server]host/port0.0.0.0/3770监听地址与端口[server]name从主机名推导机器在 App 与推送中的显示名依次取SBM_HOSTNAME、/etc/host_hostname、OS 主机名[server]cors_allowed_origins空仅同源允许跨域调用 API 的来源如托管在 Cloudflare Pages 上的面板[server.tls]cert_path/key_path无可选 TLS 配置远程终端与文件 API 的硬性要求[monitoring]interval_seconds7核心指标cpu/mem/disk/net/uptime 等采集周期[monitoring]push_rate1/1m告警规则的最短触发频率[monitoring.extended]interval_secsinterval_seconds × 10下限 120s电池/传感器/SMART/AMD-GPU 等扩展数据采集周期这些字段仍需smartctl、sensors、amd-smiCLI 工具[monitoring.extended.idle_pause]enabled/threshold_secstrue/interval_seconds × 4无人轮询时暂停扩展采集核心指标与告警不受影响[monitoring.data_retention]metrics_days/alerts_days30/90系统指标与告警记录保留天数[monitoring.data_retention]cleanup_interval_hours24清理任务运行周期[monitoring.data_retention]max_db_size_mb256SQLite 文件硬上限超出后丢弃最旧时序行0关闭[[monitoring.rules]]name/monitor_type/threshold/matcher内置 CPU/内存/磁盘三条示例告警规则如threshold 77%、matcher cpu[remote_access]ssh_addr127.0.0.1:22面板终端连接的 SSH 服务器地址[remote_access.terminal]enabledfalse面板网页内终端默认关闭无法从面板打开[remote_access.fs]enabled/rootsfalse/[]文件浏览 APIroots必填未命名目录则服务为空[remote_access.exec]timeout_secs/max_output_bytes/max_request_bytes60 / 依内存而定≥1 MiBPOST /api/v1/exec单条命令的资源上限[[push]]name/push_type及各自字段见示例推送渠道webhook、serverchan、bark、iOS 推送推送配置示例节选自 monitor/config.example.toml[[push]] name webhook push_type webhook url http://localhost:5700 method POST [push.headers] Content-Type application/json [push.body_template] message Server {{name}}: {{message}} [[push]] name ios push_type ios token title ServerBox Monitor content {{message}}App 功能与 agent 能力的对应关系以monitor方式添加的服务器只通过 agent 的 HTTP API 访问agent 通过GET /api/v1/capabilities上报其接受的能力App 只提供这些能力见 monitor/README.mdApp 功能需要的 agent 配置状态、图表、历史曲线仅需登录进程、systemd、容器、snippet、电源full_accessPOST /api/v1/exec终端full_access/api/v1/terminal/ws文件浏览[remote_access.fs] enabled true且配置roots注意monitor 服务器不提供 SFTP 与端口转发——agent 没有将连接中继到 App 指定地址的端点。需要这两项功能时请以 SSH 方式添加该服务器。远程访问与安全开关[remote_access]是 Monitor 安全模型的核心所有开关默认关闭且是纯配置文件决策不能从面板的设置页修改。理解这三个开关是安全部署的关键[remote_access.terminal] enabled为面板增加浏览器内终端。agent 作为SSH 客户端连接ssh_addr因此会话权限完全等同于浏览器登录的那个 SSH 账号——仅面板密码不会获得 shellsshd 自己的日志、AllowUsers与两步验证提示照常生效。会话在连接断开后保留几分钟detached_timeout_secs手机切换网络可以接回同一 shellfull_access去掉 SSH 登录这一步任何登录面板的人都能以 agent 运行账号的身份打开 shell、执行命令并访问本机可达的任何地址。未设置时跟随平台Linux 默认开启macOS 与 Windows 默认关闭。README 的警告非常直白此时面板密码就等于本机的一个 shell——这正是install.sh默认安装 user 服务的原因。如果以 root 运行 agent务必关闭它。可用环境变量SBM_FULL_ACCESS0/1覆盖环境变量优先于配置文件面板的首次使用提示可以关闭它但永远无法开启[remote_access.fs] enabledroots文件 API 的开关。roots不是可选参数——不命名目录就什么都不服务。每个请求都会解析为真实路径跟随符号链接、拒绝..落在roots之外的一律拒绝因此根目录内的链接指向/etc也逃不出去。roots [/]等于整台机器等于把面板密码升级成一个 shellagent 启动时会就此给出警告。TLS 与明文传输限制终端拒绝在明文监听上运行因为其第一条消息就携带 SSH 密码。以下方式可以满足安全要求配置[server.tls]同机反向代理终结 TLSloopback 流量无法在网络上被读取在 HTTP 之外已有传输加密的可信私有网络如 Tailscale中管理员可显式设置allow_insecure true——且 App 端还必须对该 Monitor 连接单独开启「允许不安全 HTTP」两端开关缺一不可。否则 SSH 凭据、Bearer token 与文件内容全部明文传输不应在普通局域网或不受控制的网络中使用。其他安全细节源码注释确认agent 在首次连接时固定 sshd 的 host key之后不匹配即拒绝而不是静默重新固定清除固定需手动删除ssh_known_hosts中的对应记录access_log记录谁在何时从何处打开了什么、结果如何永不记录凭据登录失败按来源地址和用户名双重限流。开发与构建从源码跑起来README 将开发指南指向文档站同时仓库的 Makefile 与 .claude/skills/serverbox-onboarding/SKILL.md 给出了完整的本地开发命令与环境要求。环境要求以仓库当前内容为准组件版本要求Flutter≥ 3.44.9pubspec.yamlenvironment:Dart SDK≥ 3.11.0同上RustFFI crate 固定 1.97.1crates/sbm_ffi/rust-toolchain.tomlNode24monitor 面板与文档站常用命令make deps # flutter pub get make run # flutter run make gen # build_runner gen-l10n改动带注解的 model 后必须执行 make analyze # flutter analyze lib test integration_test make test # cargo build -p sbm_ffi flutter test cargo test --workspace # parser、native sampler、FFI、monitor 全部测试 make monitor-dev # agent API 在 :3770 面板 dev server 在 :3000 make build PLATFORMandroid|ios|macos|linux|windows新手最容易踩的四个坑SKILL.md 明确记载先初始化子模块packages/*是路径依赖未初始化子模块时flutter pub get会直接因目录缺失失败。执行git submodule update --init --recursiveRust 不是可选项即使只是flutter runhook/rust_build_environment.dart 也会把crates/sbm_ffi编译进每次 App 构建。没有 Rust 工具链就没有 Appflutter_rust_bridge 必须在两处保持一致pubspec.yamlflutter_rust_bridge: 2.13.0与 crates/sbm_ffi/Cargo.toml 版本不一致时RustLib.init会在启动时抛错且报错信息不提及版本改动带注解的 model 后必须make gen不得手改*.g.dart、*.freezed.dart及lib/src/rust/下任何文件。测试体系仓库的 test/ 目录包含 200 测试文件覆盖解析器兼容如crates/sbm_parser/tests/dart_compat.rs、hostile_input.rs、SSH 认证、文件传输、终端会话、告警规则、配置迁移test_config_migration.rs、隐私与安全策略等make test会先构建 FFI crate 再运行 Flutter 测试保证解析器双端一致。贡献、翻译与许可任何正面贡献都受欢迎开发规范见 CONTRIBUTING.md本地环境、commit 规范、提交前检查、翻译流程贡献者需在第一个 PR 下留一条评论签署一次 CLACLA.md中文见 CLA_zh.md它授予权利让你的工作在 App Store 版本中随 AGPLv3 源码一起发布你自己的版权仍属于你翻译贡献同样欢迎流程见 CONTRIBUTING.md提交 issue 前请先确认① 附带完整日志点击首页右上角导出并按 bug 模板提交② 确认问题确实由 ServerBox 引起③ 欢迎具体、建设性的反馈主观偏好类请求如更喜欢另一种 UI可能不被采纳仓库许可证为AGPL v3lollipopkit all contributorsMonitor agent 为GPL v3lollipopkit 2023见 monitor/README.md。结语从 README.md 出发可以清晰地看到ServerBox 不是简单把图表和 SSH 拼在一起的客户端而是一套App 服务端 agent 共享 Rust 解析器的完整监控运维体系App 端负责多平台体验与交互monitor agent 负责 7×24 采集、告警推送与面板服务crates/sbm_parser 保证两端对服务器输出的一致解读。安装 App 之后为服务器装上 Monitor agent 并在config.toml中按需打开[remote_access]开关即可获得包含历史曲线、推送告警、桌面小组件与 watchOS 在内的完整能力需要更深一层的终端与文件能力时再以 SSH 方式接入。若需深入理解各功能的设计取舍仓库文档站的内容对应 docs/src/content/docs提供了架构、SSH、SFTP、终端、状态管理等专题说明。【免费下载链接】flutter_server_boxServerBox - server status toolbox项目地址: https://gitcode.com/GitHub_Trending/fl/flutter_server_box创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考