# Hardware Dashboard 这是运行在 192.168.1.37 上的局域网设备监控与维护面板。页面提供 CPU、内存、NVIDIA 显卡、磁盘 SMART、性能历史曲线、硬件问题记录和定时任务管理。支持在网页选择使用 1 张或 2 张显卡,支持夜间关机与 RTC 定时唤醒。后端只使用 Python 标准库;前端使用原生 HTML、CSS 和 JavaScript,不依赖外部 CDN。 当前访问地址是 http://192.168.1.37:8090。定时任务可以执行服务器命令,必须使用独立的管理员账号登录。该账号与 SSH root 密码相互独立。 ## 目录结构 ``` . ├── server.py # 监控网页、实时指标和历史数据 API ├── task_core.py # 定时任务定义、校验和 systemd 管理 ├── taskd.py # root 侧任务管理服务 ├── task_exec.py # 单个任务的执行器和输出记录 ├── static/ # 前端页面、样式和脚本 ├── scripts/hwlog # 硬件事件采集与命令行查看工具 ├── config/ | └── hardware-watch.example.json ├── deploy/systemd/ # dashboard、taskd 和硬件采集服务文件 ├── deploy/journald/ # 原始内核日志持久化配置 ├── docs/DEPLOYMENT.zh-CN.md # 服务器部署与技术说明 └── tests/ # 自动化测试 ``` ## 本地检查 项目只需要 Python 3.12 或更新版本,没有第三方 Python 依赖。 ``` python -m unittest discover -s tests -p "test_*.py" -v python -m py_compile server.py task_core.py taskd.py task_exec.py scripts/hwlog ``` 如需本地启动网页: ``` python server.py --host 127.0.0.1 --port 8090 ``` 服务器上的完整部署方式、文件路径、权限、任务管理和维护命令见 docs/DEPLOYMENT.zh-CN.md。 ## 服务器配置 仓库中不保存真实硬件基准配置和任务管理凭据。部署前复制示例配置: ``` sudo cp config/hardware-watch.example.json /etc/hardware-watch.json sudo nano /etc/hardware-watch.json ``` 把 expected_gpu_count 和磁盘名改成当前服务器的实际值。若经常更换显卡,将 expected_gpu_uuids 设为空列表;也可在“计算显卡”卡片选择数量并保存。网页设置通过现有管理员登录验证,保存后同步到硬件采集器,重启后仍有效。定时任务管理服务首次初始化会生成独立管理员密码文件;不要把生成的密码、任务数据库、日志或系统配置哈希提交到仓库。 ## 安全边界 - 状态、曲线和日志无需登录;修改显卡数量需要管理员登录。 - 定时任务能以 root 身份执行命令,新增、编辑、启用和立即执行均需要任务管理员登录。 - 不要把这个服务直接暴露到公网。当前设计只适合可信局域网。 - 远程访问应通过可信 VPN 或带 HTTPS 与额外认证的反向代理,而不是直接端口映射。