尧图精选

Homepage 集成 Arcane 服务状态 Widget:配置、字段与 API 数据流深度解析

🕒 发布时间:2026/9/10 7:15:37 📁 来源:尧图网络
Homepage 集成 Arcane 服务状态 Widget配置、字段与 API 数据流深度解析【免费下载链接】homepageA highly customizable homepage (or startpage / application dashboard) with Docker and service API integrations.项目地址: https://gitcode.com/GitHub_Trending/ho/homepage本指南以 Homepage 官方文档中的 Arcane 服务 Widget 配置说明为主体结合仓库源码逐层讲解如何在 services.yaml 中接入 Arcane一个开源自托管的 Docker 环境管理平台通过其 API 在仪表盘上展示容器与镜像的实时状态。读完本文你将掌握 Arcane widget 的完整配置语法、六个可用字段的含义与限制、env与key两个必填参数的作用以及数据在 Homepage 代理层与前端组件中的流转原理可直接照抄配置落地到自己的主页。Arcane Widget 能做什么Arcane 是一个面向自托管 Docker 环境的容器管理应用其自身暴露了 REST API。Homepage 的 Arcane widget 通过该 API 拉取指定环境environment下的统计数据将以下关键指标直接呈现在服务卡片上正在运行的容器数量running已停止的容器数量stopped容器总数total镜像总数images正在使用的镜像数量images_used未使用的镜像数量images_unused存在更新的镜像数量image_updates官方文档说明的完整配置如下widget: type: arcane url: http://localhost:3552 env: 0 # required, 0 is Arcane default local environment key: your-api-key fields: [running, stopped, total, image_updates] # optional配置参数详解type固定为arcane用于告知 Homepage 使用 src/widgets/arcane/widget.js 中定义的 API 映射。该 widget 已在 src/widgets/widgets.js 的 widgets 注册表中登记因此配置后即可被代理层识别。urlArcane 服务的地址。默认本地部署时使用http://localhost:3552Arcane 默认监听端口为 3552。实际请求会拼上api/前缀最终 URL 形如http://localhost:3552/api/environments/0/containers/counts。env必填Arcane 支持多环境environment管理env用于指定要查询的环境 ID。文档明确指出该项为必填且0是 Arcane 默认的本地环境。从 src/widgets/arcane/component.jsx 的源码可以看到如果env未设置或为空字符串组件会直接渲染arcane.environment_requiredEnvironment ID Required错误提示并且三个数据请求都不会发出useWidgetAPI以空字符串作为端点跳过请求。对应的测试用例shows an environment required error when env is missing也验证了这一行为三个 hook 均被调用但传入的端点均为空字符串界面展示环境缺失错误。keyArcane 的 API Key。文档特别强调使用 API Key 调用该 widget需要该 Key 具备以下权限containers:listimages:listimage-updates:read也就是说如果 Key 缺少其中任何一项权限对应的数据请求会失败并反映在 widget 的错误展示中。从 src/utils/proxy/handlers/credentialed.js 的鉴权逻辑来看arcane未命中任何 Bearer Token 特例分支因此会落入默认分支即以X-API-Key请求头携带widget.key的值发送给 Arcane API。fields可选控制卡片上展示哪些数据块最多 4 个。允许的字段取值与含义如下字段含义数据来源端点running运行中的容器数environments/{env}/containers/countsstopped已停止的容器数environments/{env}/containers/countstotal容器总数environments/{env}/containers/countsimages镜像总数environments/{env}/images/countsimages_used正在使用的镜像数environments/{env}/images/countsimages_unused未使用的镜像数environments/{env}/images/countsimage_updates有可用更新的镜像数environments/{env}/image-updates/summary不配置fields时的默认值为[running, stopped, total, image_updates]。这与 src/widgets/arcane/component.jsx 中if (!widget.fields)分支写入的默认数组完全一致。若配置超过 4 个字段组件会通过widget.fields.slice(0, MAX_FIELDS)只保留前 4 个MAX_FIELDS常量定义为 4。对应的测试用例truncates custom fields to the max allowed传入了 5 个字段断言最终只渲染 4 个 block多余的images_unused不出现。数据流与 API 映射原理Arcane widget 的前端展示层在 src/widgets/arcane/component.jsx组件通过useWidgetAPI来自 src/utils/proxy/use-widget-api.js并行发起三次请求containers端点 →environments/{env}/containers/countsimages端点 →environments/{env}/images/countsupdates端点 →environments/{env}/image-updates/summary端点的最终拼装发生在 src/widgets/arcane/widget.jsconst widget { api: {url}/api/{endpoint}, proxyHandler: credentialedProxyHandler, mappings: { containers: { endpoint: environments/{env}/containers/counts, map: (data) asJson(data).data, }, images: { endpoint: environments/{env}/images/counts, map: (data) asJson(data).data, }, updates: { endpoint: environments/{env}/image-updates/summary, map: (data) asJson(data).data, }, }, };即基础地址为{url}/api/{endpoint}其中{url}、{env}都会用你在 services.yaml 中填写的url与env进行模板替换。三次请求的结果再通过map函数取出响应体中的data字段作为有效负载。请求由credentialedProxyHandler代理执行其实现位于 src/utils/proxy/handlers/credentialed.js核心流程为根据请求中的group、service参数查找到对应的 widget 配置校验该 widget 类型已注册 API 映射否则返回 403拼接目标 URL构造请求头Content-Type: application/json外加X-API-Key等鉴权头通过httpProxy转发请求并使用validateWidgetData校验返回数据对 200 响应执行map映射后回传前端。这意味着 API Key 只会在服务端代理层使用不会暴露到浏览器端这是 Homepage 所有服务 widget 的统一安全设计。前端渲染与数据兜底拿到三个端点的数据后组件会做如下处理任何一次请求出现错误或返回体中包含detail字段Arcane API 的错误约定组件都会在服务卡片上渲染错误信息见测试用例shows an error when API calls return detail errors与renders error UI when any widget call fails。三个端点都成功时分别取出字段runningContainers、stoppedContainers、totalContainers、totalImages、imagesInuse、imagesUnused、imagesWithUpdates。若某个计数字段缺失例如 Arcane 返回的数据不完整组件会兜底为0而不是显示undefined对应测试用例falls back to zero when counts are missing。最终按fields列表渲染对应数量的数据块Block组件标签文案来自 public/locales/en/common.json 中的arcane命名空间如 Containers、Images、Image Updates、Unused其余语言则通过 Homepage 的 i18n 体系翻译。实战落地步骤在 Arcane 中创建一个具备containers:list、images:list、image-updates:read权限的 API Key。在 Homepage 的 services.yaml 中为 Arcane 服务添加widget块参考服务配置说明中的通用写法- Arcane: icon: sh-arcane.png href: http://localhost:3552 description: Docker 环境管理 widget: type: arcane url: http://localhost:3552 env: 0 key: your-api-key fields: [running, stopped, total, image_updates]如果你更关注镜像维护可把fields换成[images, images_used, images_unused, image_updates]用于在主页上快速发现可清理的未使用镜像与待更新镜像。注意事项env必须显式提供缺失时卡片会显示 Environment ID Required且不会发起任何请求这从组件源码与测试用例均可确认。fields最多 4 个多余的配置会被静默截断建议直接按上限规划展示内容。key对应的权限不是read-only类全局权限而是文档明确列出的三项 API 权限权限不足时对应请求会失败并体现在卡片错误上。url需要能被 Homepage 后端访问到若 Arcane 与 Homepage 部署在不同主机请填写可路由的地址而不是localhost。字段数据是快照式统计而非实时流刷新频率遵循 Homepage 全局的 widget 刷新机制窗口聚焦与定时轮询见 src/utils/hooks/window-focus.js。通过上述配置你即可在 Homepage 仪表盘上以数据块形式监控 Arcane 管理的容器与镜像状态若需了解 widget 的通用配置机制可继续阅读 Widgets 服务文档 与 信息类 Widget 文档。【免费下载链接】homepageA highly customizable homepage (or startpage / application dashboard) with Docker and service API integrations.项目地址: https://gitcode.com/GitHub_Trending/ho/homepage创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联 返回资讯列表 →