{"id":25478373,"url":"https://github.com/aplini/aplpanel","last_synced_at":"2026-04-02T01:31:03.805Z","repository":{"id":278168625,"uuid":"934732952","full_name":"ApliNi/aplPanel","owner":"ApliNi","description":"Node-OpenBMCLAPI Dashboard","archived":false,"fork":false,"pushed_at":"2025-02-18T10:56:06.000Z","size":1295,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-18T11:29:49.428Z","etag":null,"topics":["bmclapi","dashboard","javascript","openbmclapi"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ApliNi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-02-18T10:14:02.000Z","updated_at":"2025-02-18T10:56:09.000Z","dependencies_parsed_at":"2025-02-18T11:40:23.225Z","dependency_job_id":null,"html_url":"https://github.com/ApliNi/aplPanel","commit_stats":null,"previous_names":["aplini/aplpanel"],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ApliNi%2FaplPanel","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ApliNi%2FaplPanel/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ApliNi%2FaplPanel/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ApliNi%2FaplPanel/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ApliNi","download_url":"https://codeload.github.com/ApliNi/aplPanel/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239488823,"owners_count":19647274,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bmclapi","dashboard","javascript","openbmclapi"],"created_at":"2025-02-18T14:31:45.025Z","updated_at":"2026-04-02T01:31:03.795Z","avatar_url":"https://github.com/ApliNi.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# aplPanel\n```js\n[AplPanel] ฅ^•ﻌ•^ฅ\n  | v0.2.0 ✦ OpenBmclApi 1.14.0\n  | https://github.com/ApliNi/aplPanel\n```\n\n为 OpenBMCLAPI Node 端制作的仪表板. [查看演示](https://bmclapi-2-node.ipacel.cc/dashboard/)\n\n## 安装\n1. [下载面板](https://github.com/ApliNi/aplPanel/releases), 将 `aplPanel` 目录解压到 OpenBMCLAPI 根目录下\n2. 修改启动命令为 `node ./aplPanel/start.js`\n\n## 面板\n面板地址: http://127.0.0.1:4000/dashboard/\n\n### 近期数据\n面板中的 `近期用户代理` 和 `近期网络类型` 数据来源于请求计数. 在 v0.2.1 版本后, 面板每天凌晨将数值 `* 0.75` 使近期的新数据能够更快反映在图表上, 因此不再显示具体数值, 而是百分比.\n\n## 启动参数\n- 指定节点 ID: `--id=CLUSTER_ID` - 设置节点 ID, 用于在配置文件中定位节点\n\n## 配置文件 \u0026 多个节点\n面板支持在一个节点上切换显示多个节点的信息.\n在 `./aplPanelConfig.json` 中配置每个节点的 CLUSTER_ID 和显示文本即可.\n\n**示例配置**\n```json\n{\n\t\"dataPath\": \"./aplPanel/data\",\n\t\"proxyMeasureRouteFactory\": false,\n\t\"persistenceSpeedTestFiles\": [ 1, 10, 20, 40 ],\n\t\"cacheSpeedTestFileUrl\": true,\n\t\"ip\": \"\",\n\t\"statsExcludeIp\": [ \"127.0.0.1\" ],\n\t\"dayStartLimiter\": 24,\n\t\"startDelay\": 10,\n\t\"nodes\": {\n\t\t\"_ALL_\": {\n\t\t\t\"enablePanel\": true,\n\t\t\t\"name\": \"[ALL]\",\n\t\t\t\"title\": \"ApliNi's OpenBMCLAPI Dashboard All\",\n\t\t\t\"env\": {\n\t\t\t\t\"clusterPublicPort\": 443\n\t\t\t}\n\t\t},\n\t\t\"CLUSTER_ID\": {\n\t\t\t\"enablePanel\": true,\n\t\t\t\"name\": \"[Node.1]\",\n\t\t\t\"title\": \"ApliNi's OpenBMCLAPI Dashboard 1\",\n\t\t\t\"env\": {\n\t\t\t\t\"port\": 4001,\n\t\t\t\t\"clusterIp\": \"oba1.site.com\",\n\t\t\t\t\"clusterPublicPort\": 4001\n\t\t\t}\n\t\t},\n\t\t\"CLUSTER_ID_2\": {\n\t\t\t\"enablePanel\": false,\n\t\t\t\"name\": \"[Node.2]\",\n\t\t\t\"title\": \"ApliNi's OpenBMCLAPI Dashboard 2\",\n\t\t\t\"url\": \"https://oba2.site.com/dashboard/\",\n\t\t\t\"env\": {\n\t\t\t\t\"port\": 4002,\n\t\t\t\t\"byoc\": false,\n\t\t\t\t\"clusterId\": \"xxxxxxx\",\n\t\t\t\t\"clusterSecret\": \"xxxxxxx\",\n\t\t\t\t\"storageOpts\": { \"url\":\"http://127.0.0.1:5244/dav\", \"basePath\":\"pan/OpenBmclApi/download\", \"username\":\"username\", \"password\":\"password\" },\n\t\t\t\t\"clusterIp\": \"oba2.site.com\",\n\t\t\t\t\"clusterPublicPort\": 443\n\t\t\t}\n\t\t}\n\t}\n}\n```\n\n- `dataPath`: 可以将所有节点的数据路径配置在同一个位置, 支持绝对位置, 默认无需修改\n- `proxyMeasureRouteFactory`: 将测速文件保存到存储目录, 并使用存储提供测速文件, 仅供 WebDav 存储使用\n- `persistenceSpeedTestFiles`: 预建测速文件列表, 填写文件大小数值 (MB), 仅供 WebDav 存储使用\n- `cacheSpeedTestFileUrl`: 提前缓存测速文件重定向地址, 对测速效果几乎没有提升, 仅供 WebDav 存储使用\n- `ip`: 留空使用默认获取的 ip 地址, 可选择请求头中的 ip 地址 (如填写 `x-forwarded-for` 或 `cf-connecting-ip`)\n- `statsExcludeIp`: 用于排除统计中的本地 ip 地址\n- `dayStartLimiter`: 限制每天的启动次数, 超过次数则等待到第二天再启动\n- `startDelay`: 启动延迟, 单位秒\n- `env`: 存放节点默认配置\n- `nodes`: 在面板上显示的其他节点信息\n\t- `enable`: [默认 true] 允许关闭这个节点的 web 面板, 但保持数据记录继续运行 (这几乎不会节省性能)\n\t- `allowRobots`: [默认 false] 允许面板被搜索引擎收录\n\t- `title`: [必选] 面板顶栏左侧标题文字\n\t- `name`: [必选] 面板顶栏右侧节点名称按钮文字\n\t- `url`: [可选] 连接到其他远程面板, 填写其他面板的固定公网地址即可\n\t- `env`: 存放每个节点的配置\n\t- 使用 `_ALL_` 作为键名则会合并所有节点的统计信息\n\n通过这些配置, 我们可以最小化的暴露面板到公网, 并同时查看其他节点的数据.\n\n### env\n- 面板通过节点配置的 CLUSTER_ID 或 CLUSTER_PORT 来定位节点, 推荐在启动脚本中设置端口, 其余配置全部放在配置文件中\n- `clusterIp`, `clusterPublicPort`: 这两项配置会在每次上线时重新加载, 其余配置只会在启动时应用一次 (此功能用于配合其他特殊的内网穿透工具工作)\n- 可以在里面添加其他配置选项, 具体查看 `./dist/config.js` 文件\n```js\nclusterId = env.get('CLUSTER_ID').required().asString();\nclusterSecret = env.get('CLUSTER_SECRET').required().asString();\nclusterIp = env.get('CLUSTER_IP').asString();\nport = env.get('CLUSTER_PORT').default(4000).asPortNumber();\nclusterPublicPort = env.get('CLUSTER_PUBLIC_PORT').default(this.port).asPortNumber();\nbyoc = env.get('CLUSTER_BYOC').asBool();\ndisableAccessLog = env.get('DISABLE_ACCESS_LOG').asBool();\nenableNginx = env.get('ENABLE_NGINX').asBool();\nenableUpnp = env.get('ENABLE_UPNP').asBool();\nstorage = env.get('CLUSTER_STORAGE').default('file').asString();\nstorageOpts = env.get('CLUSTER_STORAGE_OPTIONS').asJsonObject();\nsslKey = env.get('SSL_KEY').asString();\nsslCert = env.get('SSL_CERT').asString();\n```\n\n## 更新\n覆盖文件然后重新运行即可.\n\n## 卸载\n1. 运行 `node ./aplPanel/uninstall.js`\n2. 删除 `aplPanel` 目录\n\n---\n\n项目正在开发中, 当前版本不一定稳定, 欢迎测试以及提出问题 ヾ(•ω•`)o\n\n## 致谢\n- [CloudFlare](https://www.cloudflare.com/) - 提供 CDN 加速服务\n- [Apache ECharts](https://echarts.apache.org/) - 开源可视化图表库\n- [Go-OpenBMCLAPI](https://github.com/LiterMC/go-openbmclapi) - Go 语言实现的 OpenBMCLAPI 节点\n- [OpenBMCLAPI](https://github.com/bangbang93/openbmclapi) - OpenBMCLAPI 节点\n- 前端字体: `HarmonyOS_Sans_SC_Medium`, `JetBrainsMono-Regular`, `Ubuntu-Regular`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faplini%2Faplpanel","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faplini%2Faplpanel","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faplini%2Faplpanel/lists"}